* [PATCH v3 00/15] drm/atomic: Allocate drm_private_state through a callback
@ 2026-01-19 12:49 Maxime Ripard
2026-01-19 12:50 ` [PATCH v3 09/15] drm/ingenic: Switch private_obj initialization to atomic_create_state Maxime Ripard
2026-01-19 12:50 ` [PATCH v3 15/15] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard
0 siblings, 2 replies; 5+ messages in thread
From: Maxime Ripard @ 2026-01-19 12:49 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Ville Syrjälä,
Dmitry Baryshkov, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Harry Wentland,
Leo Li, Rodrigo Siqueira, Alex Deucher, Christian König,
amd-gfx, Liviu Dudau, Paul Cercueil, linux-mips, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, linux-arm-msm, freedreno, Tomi Valkeinen,
Thierry Reding, Mikko Perttunen, Jonathan Hunter, linux-tegra,
Dave Stevenson, Maíra Canal, kernel-list
Hi,
This series started from my work on the hardware state readout[1], and
was suggested by Dmitry[2].
This series deal with the fact that drm_private_obj (and thus bridges)
are not initialized using the same pattern than any other object. This
series solves that inconsistency by aligning it to what we're doing for
all the other objects.
This was tested on a TI SK-AM62, with three bridges.
Let me know what you think,
Maxime
1: https://lore.kernel.org/dri-devel/20250902-drm-state-readout-v1-0-14ad5315da3f@kernel.org/
2: https://lore.kernel.org/dri-devel/zvqtehg66dbrrdmik6ylo2kdk74umfzo5hbfkizwsb352nlyqv@jgouvmbfwa4x/
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Changes in v3:
- EDITME: describe what is new in this series revision.
- EDITME: use bulletpoints and terse descriptions.
- Link to v2: https://lore.kernel.org/r/20251014-drm-private-obj-reset-v2-0-6dd60e985e9d@kernel.org
Changes in v2:
- Switch to a new hook instead of reset since some drm_private_objs want
to persist across suspends
- Drop the call to drm_private_obj_funcs.reset in
drm_mode_config_reset()
- Link to v1: https://lore.kernel.org/r/20251008-drm-private-obj-reset-v1-0-805ab43ae65a@kernel.org
---
Maxime Ripard (15):
drm/atomic: Make drm_atomic_private_obj_init fallible
drm/atomic: Add new atomic_create_state callback to drm_private_obj
drm/atomic-helper: Add private_obj atomic_create_state helper
drm/bridge: Switch private_obj initialization to atomic_create_state
drm/dp_mst: Switch private_obj initialization to atomic_create_state
drm/dp_tunnel: Switch private_obj initialization to atomic_create_state
drm/amdgpu: Switch private_obj initialization to atomic_create_state
drm/arm: komeda: Switch private_obj initialization to atomic_create_state
drm/ingenic: Switch private_obj initialization to atomic_create_state
drm/msm: mdp5: Switch private_obj initialization to atomic_create_state
drm/msm: dpu1: Switch private_obj initialization to atomic_create_state
drm/omapdrm: Switch private_obj initialization to atomic_create_state
drm/tegra: Switch private_obj initialization to atomic_create_state
drm/vc4: Switch private_obj initialization to atomic_create_state
drm/atomic: Remove state argument to drm_atomic_private_obj_init
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 51 ++---
.../gpu/drm/arm/display/komeda/komeda_pipeline.h | 2 +
.../drm/arm/display/komeda/komeda_private_obj.c | 208 ++++++++++++++-------
drivers/gpu/drm/display/drm_dp_mst_topology.c | 36 ++--
drivers/gpu/drm/display/drm_dp_tunnel.c | 25 ++-
drivers/gpu/drm/drm_atomic.c | 22 ++-
drivers/gpu/drm/drm_atomic_state_helper.c | 22 +++
drivers/gpu/drm/drm_bridge.c | 32 ++--
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 28 +--
drivers/gpu/drm/ingenic/ingenic-ipu.c | 28 +--
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 41 ++--
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 40 ++--
drivers/gpu/drm/omapdrm/omap_drv.c | 22 ++-
drivers/gpu/drm/tegra/hub.c | 22 ++-
drivers/gpu/drm/vc4/vc4_kms.c | 67 ++++---
include/drm/drm_atomic.h | 20 +-
include/drm/drm_atomic_state_helper.h | 3 +
17 files changed, 437 insertions(+), 232 deletions(-)
---
base-commit: b36178488d479e9a53bbef2b01280378b5586e60
change-id: 20251008-drm-private-obj-reset-ae1e2741027a
Best regards,
--
Maxime Ripard <mripard@redhat.com>
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v3 09/15] drm/ingenic: Switch private_obj initialization to atomic_create_state 2026-01-19 12:49 [PATCH v3 00/15] drm/atomic: Allocate drm_private_state through a callback Maxime Ripard @ 2026-01-19 12:50 ` Maxime Ripard 2026-01-19 16:18 ` Paul Cercueil 2026-01-19 12:50 ` [PATCH v3 15/15] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard 1 sibling, 1 reply; 5+ messages in thread From: Maxime Ripard @ 2026-01-19 12:50 UTC (permalink / raw) To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, Maxime Ripard, Paul Cercueil, linux-mips The ingenic driver relies on two drm_private_objs, that are 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 <mripard@kernel.org> --- Cc: Paul Cercueil <paul@crapouillou.net> Cc: linux-mips@vger.kernel.org --- drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 28 +++++++++++++++++----------- drivers/gpu/drm/ingenic/ingenic-ipu.c | 28 ++++++++++++++++------------ 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c index d3213fbf22be14b177fc1b7100c5b721d5f17924..862691991ed2770d30342bf531e828e34bd7080a 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -952,10 +952,24 @@ static void ingenic_drm_destroy_state(struct drm_private_obj *obj, struct ingenic_drm_private_state *priv_state = to_ingenic_drm_priv_state(state); kfree(priv_state); } +static struct drm_private_state * +ingenic_drm_create_state(struct drm_private_obj *obj) +{ + struct ingenic_drm_private_state *priv_state; + + priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL); + if (!priv_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &priv_state->base); + + return &priv_state->base; +} + DEFINE_DRM_GEM_DMA_FOPS(ingenic_drm_fops); static const struct drm_driver ingenic_drm_driver_data = { .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, .name = "ingenic-drm", @@ -1032,10 +1046,11 @@ static const struct drm_mode_config_funcs ingenic_drm_mode_config_funcs = { static struct drm_mode_config_helper_funcs ingenic_drm_mode_config_helpers = { .atomic_commit_tail = drm_atomic_helper_commit_tail, }; static const struct drm_private_state_funcs ingenic_drm_private_state_funcs = { + .atomic_create_state = ingenic_drm_create_state, .atomic_duplicate_state = ingenic_drm_duplicate_state, .atomic_destroy_state = ingenic_drm_destroy_state, }; static void ingenic_drm_unbind_all(void *d) @@ -1085,11 +1100,10 @@ static void ingenic_drm_atomic_private_obj_fini(struct drm_device *drm, void *pr } static int ingenic_drm_bind(struct device *dev, bool has_components) { struct platform_device *pdev = to_platform_device(dev); - struct ingenic_drm_private_state *private_state; const struct jz_soc_info *soc_info; struct ingenic_drm *priv; struct clk *parent_clk; struct drm_plane *primary; struct drm_bridge *bridge; @@ -1385,23 +1399,17 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) if (ret) { dev_err(dev, "Unable to register clock notifier\n"); goto err_devclk_disable; } - private_state = kzalloc(sizeof(*private_state), GFP_KERNEL); - if (!private_state) { - ret = -ENOMEM; - goto err_clk_notifier_unregister; - } - - drm_atomic_private_obj_init(drm, &priv->private_obj, &private_state->base, + drm_atomic_private_obj_init(drm, &priv->private_obj, NULL, &ingenic_drm_private_state_funcs); ret = drmm_add_action_or_reset(drm, ingenic_drm_atomic_private_obj_fini, &priv->private_obj); if (ret) - goto err_private_state_free; + goto err_clk_notifier_unregister; ret = drm_dev_register(drm, 0); if (ret) { dev_err(dev, "Failed to register DRM driver\n"); goto err_clk_notifier_unregister; @@ -1409,12 +1417,10 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) drm_client_setup(drm, NULL); return 0; -err_private_state_free: - kfree(private_state); err_clk_notifier_unregister: clk_notifier_unregister(parent_clk, &priv->clock_nb); err_devclk_disable: if (priv->lcd_clk) clk_disable_unprepare(priv->lcd_clk); diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c b/drivers/gpu/drm/ingenic/ingenic-ipu.c index 32638a713241abbd4eaed09f0aaec2b790650cc9..253a1ce30997308547b61339468d52e6875785d3 100644 --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c @@ -748,11 +748,26 @@ static void ingenic_ipu_destroy_state(struct drm_private_obj *obj, struct ingenic_ipu_private_state *priv_state = to_ingenic_ipu_priv_state(state); kfree(priv_state); } +static struct drm_private_state * +ingenic_ipu_create_state(struct drm_private_obj *obj) +{ + struct ingenic_ipu_private_state *priv_state; + + priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL); + if (!priv_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &priv_state->base); + + return &priv_state->base; +} + static const struct drm_private_state_funcs ingenic_ipu_private_state_funcs = { + .atomic_create_state = ingenic_ipu_create_state, .atomic_duplicate_state = ingenic_ipu_duplicate_state, .atomic_destroy_state = ingenic_ipu_destroy_state, }; static irqreturn_t ingenic_ipu_irq_handler(int irq, void *arg) @@ -791,11 +806,10 @@ static const struct regmap_config ingenic_ipu_regmap_config = { }; static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) { struct platform_device *pdev = to_platform_device(dev); - struct ingenic_ipu_private_state *private_state; const struct soc_info *soc_info; struct drm_device *drm = d; struct drm_plane *plane; struct ingenic_ipu *ipu; void __iomem *base; @@ -885,24 +899,14 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) if (err) { dev_err(dev, "Unable to prepare clock\n"); return err; } - private_state = kzalloc(sizeof(*private_state), GFP_KERNEL); - if (!private_state) { - err = -ENOMEM; - goto err_clk_unprepare; - } - - drm_atomic_private_obj_init(drm, &ipu->private_obj, &private_state->base, + drm_atomic_private_obj_init(drm, &ipu->private_obj, NULL, &ingenic_ipu_private_state_funcs); return 0; - -err_clk_unprepare: - clk_unprepare(ipu->clk); - return err; } static void ingenic_ipu_unbind(struct device *dev, struct device *master, void *d) { -- 2.52.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 09/15] drm/ingenic: Switch private_obj initialization to atomic_create_state 2026-01-19 12:50 ` [PATCH v3 09/15] drm/ingenic: Switch private_obj initialization to atomic_create_state Maxime Ripard @ 2026-01-19 16:18 ` Paul Cercueil 0 siblings, 0 replies; 5+ messages in thread From: Paul Cercueil @ 2026-01-19 16:18 UTC (permalink / raw) To: Maxime Ripard, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, linux-mips Hi Maxime, Le lundi 19 janvier 2026 à 13:50 +0100, Maxime Ripard a écrit : > The ingenic driver relies on two drm_private_objs, that are > 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 <mripard@kernel.org> Thought I had ack'd it before, apparently I didn't. Acked-by: Paul Cercueil <paul@crapouillou.net> Cheers, -Paul > > --- > > Cc: Paul Cercueil <paul@crapouillou.net> > Cc: linux-mips@vger.kernel.org > --- > drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 28 +++++++++++++++++---- > ------- > drivers/gpu/drm/ingenic/ingenic-ipu.c | 28 ++++++++++++++++----- > ------- > 2 files changed, 33 insertions(+), 23 deletions(-) > > diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > index > d3213fbf22be14b177fc1b7100c5b721d5f17924..862691991ed2770d30342bf531e > 828e34bd7080a 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > @@ -952,10 +952,24 @@ static void ingenic_drm_destroy_state(struct > drm_private_obj *obj, > struct ingenic_drm_private_state *priv_state = > to_ingenic_drm_priv_state(state); > > kfree(priv_state); > } > > +static struct drm_private_state * > +ingenic_drm_create_state(struct drm_private_obj *obj) > +{ > + struct ingenic_drm_private_state *priv_state; > + > + priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL); > + if (!priv_state) > + return ERR_PTR(-ENOMEM); > + > + __drm_atomic_helper_private_obj_create_state(obj, > &priv_state->base); > + > + return &priv_state->base; > +} > + > DEFINE_DRM_GEM_DMA_FOPS(ingenic_drm_fops); > > static const struct drm_driver ingenic_drm_driver_data = { > .driver_features = DRIVER_MODESET | DRIVER_GEM | > DRIVER_ATOMIC, > .name = "ingenic-drm", > @@ -1032,10 +1046,11 @@ static const struct drm_mode_config_funcs > ingenic_drm_mode_config_funcs = { > static struct drm_mode_config_helper_funcs > ingenic_drm_mode_config_helpers = { > .atomic_commit_tail = drm_atomic_helper_commit_tail, > }; > > static const struct drm_private_state_funcs > ingenic_drm_private_state_funcs = { > + .atomic_create_state = ingenic_drm_create_state, > .atomic_duplicate_state = ingenic_drm_duplicate_state, > .atomic_destroy_state = ingenic_drm_destroy_state, > }; > > static void ingenic_drm_unbind_all(void *d) > @@ -1085,11 +1100,10 @@ static void > ingenic_drm_atomic_private_obj_fini(struct drm_device *drm, void *pr > } > > static int ingenic_drm_bind(struct device *dev, bool has_components) > { > struct platform_device *pdev = to_platform_device(dev); > - struct ingenic_drm_private_state *private_state; > const struct jz_soc_info *soc_info; > struct ingenic_drm *priv; > struct clk *parent_clk; > struct drm_plane *primary; > struct drm_bridge *bridge; > @@ -1385,23 +1399,17 @@ static int ingenic_drm_bind(struct device > *dev, bool has_components) > if (ret) { > dev_err(dev, "Unable to register clock notifier\n"); > goto err_devclk_disable; > } > > - private_state = kzalloc(sizeof(*private_state), GFP_KERNEL); > - if (!private_state) { > - ret = -ENOMEM; > - goto err_clk_notifier_unregister; > - } > - > - drm_atomic_private_obj_init(drm, &priv->private_obj, > &private_state->base, > + drm_atomic_private_obj_init(drm, &priv->private_obj, NULL, > > &ingenic_drm_private_state_funcs); > > ret = drmm_add_action_or_reset(drm, > ingenic_drm_atomic_private_obj_fini, > &priv->private_obj); > if (ret) > - goto err_private_state_free; > + goto err_clk_notifier_unregister; > > ret = drm_dev_register(drm, 0); > if (ret) { > dev_err(dev, "Failed to register DRM driver\n"); > goto err_clk_notifier_unregister; > @@ -1409,12 +1417,10 @@ static int ingenic_drm_bind(struct device > *dev, bool has_components) > > drm_client_setup(drm, NULL); > > return 0; > > -err_private_state_free: > - kfree(private_state); > err_clk_notifier_unregister: > clk_notifier_unregister(parent_clk, &priv->clock_nb); > err_devclk_disable: > if (priv->lcd_clk) > clk_disable_unprepare(priv->lcd_clk); > diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c > b/drivers/gpu/drm/ingenic/ingenic-ipu.c > index > 32638a713241abbd4eaed09f0aaec2b790650cc9..253a1ce30997308547b61339468 > d52e6875785d3 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c > +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c > @@ -748,11 +748,26 @@ static void ingenic_ipu_destroy_state(struct > drm_private_obj *obj, > struct ingenic_ipu_private_state *priv_state = > to_ingenic_ipu_priv_state(state); > > kfree(priv_state); > } > > +static struct drm_private_state * > +ingenic_ipu_create_state(struct drm_private_obj *obj) > +{ > + struct ingenic_ipu_private_state *priv_state; > + > + priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL); > + if (!priv_state) > + return ERR_PTR(-ENOMEM); > + > + __drm_atomic_helper_private_obj_create_state(obj, > &priv_state->base); > + > + return &priv_state->base; > +} > + > static const struct drm_private_state_funcs > ingenic_ipu_private_state_funcs = { > + .atomic_create_state = ingenic_ipu_create_state, > .atomic_duplicate_state = ingenic_ipu_duplicate_state, > .atomic_destroy_state = ingenic_ipu_destroy_state, > }; > > static irqreturn_t ingenic_ipu_irq_handler(int irq, void *arg) > @@ -791,11 +806,10 @@ static const struct regmap_config > ingenic_ipu_regmap_config = { > }; > > static int ingenic_ipu_bind(struct device *dev, struct device > *master, void *d) > { > struct platform_device *pdev = to_platform_device(dev); > - struct ingenic_ipu_private_state *private_state; > const struct soc_info *soc_info; > struct drm_device *drm = d; > struct drm_plane *plane; > struct ingenic_ipu *ipu; > void __iomem *base; > @@ -885,24 +899,14 @@ static int ingenic_ipu_bind(struct device *dev, > struct device *master, void *d) > if (err) { > dev_err(dev, "Unable to prepare clock\n"); > return err; > } > > - private_state = kzalloc(sizeof(*private_state), GFP_KERNEL); > - if (!private_state) { > - err = -ENOMEM; > - goto err_clk_unprepare; > - } > - > - drm_atomic_private_obj_init(drm, &ipu->private_obj, > &private_state->base, > + drm_atomic_private_obj_init(drm, &ipu->private_obj, NULL, > > &ingenic_ipu_private_state_funcs); > > return 0; > - > -err_clk_unprepare: > - clk_unprepare(ipu->clk); > - return err; > } > > static void ingenic_ipu_unbind(struct device *dev, > struct device *master, void *d) > { ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 15/15] drm/atomic: Remove state argument to drm_atomic_private_obj_init 2026-01-19 12:49 [PATCH v3 00/15] drm/atomic: Allocate drm_private_state through a callback Maxime Ripard 2026-01-19 12:50 ` [PATCH v3 09/15] drm/ingenic: Switch private_obj initialization to atomic_create_state Maxime Ripard @ 2026-01-19 12:50 ` Maxime Ripard 2026-01-20 14:45 ` Liviu Dudau 1 sibling, 1 reply; 5+ messages in thread From: Maxime Ripard @ 2026-01-19 12:50 UTC (permalink / raw) To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, Maxime Ripard, Dmitry Baryshkov, Tomi Valkeinen, Liviu Dudau, Andrzej Hajda, Neil Armstrong, Robert Foss, Paul Cercueil, Thierry Reding, Mikko Perttunen, Jonathan Hunter, Dave Stevenson, Rodrigo Siqueira, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, Maíra Canal, Raspberry Pi Kernel Maintenance, amd-gfx, linux-mips, linux-arm-msm, freedreno, linux-tegra Now that all drm_private_objs users have been converted to use atomic_create_state instead of the old ad-hoc initialization, we can remove the state parameter from drm_private_obj_init and the fallback code. Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Signed-off-by: Maxime Ripard <mripard@kernel.org> --- To: Liviu Dudau <liviu.dudau@arm.com> To: Andrzej Hajda <andrzej.hajda@intel.com> To: Neil Armstrong <neil.armstrong@linaro.org> To: Robert Foss <rfoss@kernel.org> To: Paul Cercueil <paul@crapouillou.net> To: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> To: Thierry Reding <thierry.reding@gmail.com> To: Mikko Perttunen <mperttunen@nvidia.com> To: Jonathan Hunter <jonathanh@nvidia.com> To: Dave Stevenson <dave.stevenson@raspberrypi.com> Cc: Rodrigo Siqueira <siqueira@igalia.com> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> Cc: Jonas Karlman <jonas@kwiboo.se> Cc: Jernej Skrabec <jernej.skrabec@gmail.com> Cc: Abhinav Kumar <abhinav.kumar@linux.dev> Cc: Jessica Zhang <jessica.zhang@oss.qualcomm.com> Cc: Sean Paul <sean@poorly.run> Cc: Marijn Suijten <marijn.suijten@somainline.org> Cc: "Maíra Canal" <mcanal@igalia.com> Cc: Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com> Cc: amd-gfx@lists.freedesktop.org Cc: linux-mips@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org Cc: freedreno@lists.freedesktop.org Cc: linux-tegra@vger.kernel.org --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 - .../drm/arm/display/komeda/komeda_private_obj.c | 16 ++++++++-------- drivers/gpu/drm/display/drm_dp_mst_topology.c | 1 - drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +- drivers/gpu/drm/drm_atomic.c | 22 +++++----------------- drivers/gpu/drm/drm_bridge.c | 1 - drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 2 +- drivers/gpu/drm/ingenic/ingenic-ipu.c | 2 +- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 - drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 1 - drivers/gpu/drm/omapdrm/omap_drv.c | 2 +- drivers/gpu/drm/tegra/hub.c | 2 +- drivers/gpu/drm/vc4/vc4_kms.c | 4 +--- include/drm/drm_atomic.h | 1 - 14 files changed, 19 insertions(+), 39 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index a97e1bf1bfdc6384a6ac83f907878807bb3b62a0..cff3d00a367728449b4a4de4cc9f3c9036e3924f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -4932,11 +4932,10 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) /* indicates support for immediate flip */ adev_to_drm(adev)->mode_config.async_page_flip = true; drm_atomic_private_obj_init(adev_to_drm(adev), &adev->dm.atomic_obj, - NULL, &dm_atomic_state_funcs); r = amdgpu_display_modeset_create_props(adev); if (r) return r; diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c index 4994b69c6595637ea832b97629b052e3aea97ee7..6270e5c525db221267b1215a27653ace578eeb0a 100644 --- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c +++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c @@ -63,11 +63,11 @@ static const struct drm_private_state_funcs komeda_layer_obj_funcs = { }; static int komeda_layer_obj_add(struct komeda_kms_dev *kms, struct komeda_layer *layer) { - drm_atomic_private_obj_init(&kms->base, &layer->base.obj, NULL, + drm_atomic_private_obj_init(&kms->base, &layer->base.obj, &komeda_layer_obj_funcs); return 0; } static struct drm_private_state * @@ -116,11 +116,11 @@ static const struct drm_private_state_funcs komeda_scaler_obj_funcs = { static int komeda_scaler_obj_add(struct komeda_kms_dev *kms, struct komeda_scaler *scaler) { drm_atomic_private_obj_init(&kms->base, - &scaler->base.obj, NULL, + &scaler->base.obj, &komeda_scaler_obj_funcs); return 0; } static struct drm_private_state * @@ -168,11 +168,11 @@ static const struct drm_private_state_funcs komeda_compiz_obj_funcs = { }; static int komeda_compiz_obj_add(struct komeda_kms_dev *kms, struct komeda_compiz *compiz) { - drm_atomic_private_obj_init(&kms->base, &compiz->base.obj, NULL, + drm_atomic_private_obj_init(&kms->base, &compiz->base.obj, &komeda_compiz_obj_funcs); return 0; } @@ -222,11 +222,11 @@ static const struct drm_private_state_funcs komeda_splitter_obj_funcs = { static int komeda_splitter_obj_add(struct komeda_kms_dev *kms, struct komeda_splitter *splitter) { drm_atomic_private_obj_init(&kms->base, - &splitter->base.obj, NULL, + &splitter->base.obj, &komeda_splitter_obj_funcs); return 0; } @@ -275,11 +275,11 @@ static const struct drm_private_state_funcs komeda_merger_obj_funcs = { static int komeda_merger_obj_add(struct komeda_kms_dev *kms, struct komeda_merger *merger) { drm_atomic_private_obj_init(&kms->base, - &merger->base.obj, NULL, + &merger->base.obj, &komeda_merger_obj_funcs); return 0; } @@ -328,11 +328,11 @@ static const struct drm_private_state_funcs komeda_improc_obj_funcs = { }; static int komeda_improc_obj_add(struct komeda_kms_dev *kms, struct komeda_improc *improc) { - drm_atomic_private_obj_init(&kms->base, &improc->base.obj, NULL, + drm_atomic_private_obj_init(&kms->base, &improc->base.obj, &komeda_improc_obj_funcs); return 0; } @@ -381,11 +381,11 @@ static const struct drm_private_state_funcs komeda_timing_ctrlr_obj_funcs = { }; static int komeda_timing_ctrlr_obj_add(struct komeda_kms_dev *kms, struct komeda_timing_ctrlr *ctrlr) { - drm_atomic_private_obj_init(&kms->base, &ctrlr->base.obj, NULL, + drm_atomic_private_obj_init(&kms->base, &ctrlr->base.obj, &komeda_timing_ctrlr_obj_funcs); return 0; } @@ -435,11 +435,11 @@ static const struct drm_private_state_funcs komeda_pipeline_obj_funcs = { }; static int komeda_pipeline_obj_add(struct komeda_kms_dev *kms, struct komeda_pipeline *pipe) { - drm_atomic_private_obj_init(&kms->base, &pipe->obj, NULL, + drm_atomic_private_obj_init(&kms->base, &pipe->obj, &komeda_pipeline_obj_funcs); return 0; } diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c index 1ab0233a2a18f784d8c43e61b94e40a06bd4baf6..7e0e5b90df7251beed6985e16d1c3270ddfb3f37 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -5763,11 +5763,10 @@ int drm_dp_mst_topology_mgr_init(struct drm_dp_mst_topology_mgr *mgr, mgr->max_dpcd_transaction_bytes = max_dpcd_transaction_bytes; mgr->max_payloads = max_payloads; mgr->conn_base_id = conn_base_id; drm_atomic_private_obj_init(dev, &mgr->base, - NULL, &drm_dp_mst_topology_state_funcs); return 0; } EXPORT_SYMBOL(drm_dp_mst_topology_mgr_init); diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/display/drm_dp_tunnel.c index 2abd714efd19f27697770813b38194e384be87ce..241498cef7de497afdf2837f750113743c001240 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -1598,11 +1598,11 @@ static bool init_group(struct drm_dp_tunnel_mgr *mgr, struct drm_dp_tunnel_group { group->mgr = mgr; group->available_bw = -1; INIT_LIST_HEAD(&group->tunnels); - drm_atomic_private_obj_init(mgr->dev, &group->base, NULL, + drm_atomic_private_obj_init(mgr->dev, &group->base, &tunnel_group_funcs); return true; } diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index e3029c8f02e5a3698781117bcc80eff98407cf16..243579fa1c756cd2eda660ad658cb49d67106584 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -919,11 +919,10 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, /** * drm_atomic_private_obj_init - initialize private object * @dev: DRM device this object will be attached to * @obj: private object - * @state: initial private object state * @funcs: pointer to the struct of function pointers that identify the object * type * * Initialize the private object, which can be embedded into any * driver private object that needs its own atomic state. @@ -931,37 +930,26 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, * RETURNS: * Zero on success, error code on failure */ int drm_atomic_private_obj_init(struct drm_device *dev, struct drm_private_obj *obj, - struct drm_private_state *state, const struct drm_private_state_funcs *funcs) { + struct drm_private_state *state; memset(obj, 0, sizeof(*obj)); drm_modeset_lock_init(&obj->lock); obj->dev = dev; obj->funcs = funcs; list_add_tail(&obj->head, &dev->mode_config.privobj_list); - /* - * Not all users of drm_atomic_private_obj_init have been - * converted to using &drm_private_obj_funcs.atomic_create_state yet. - * For the time being, let's only call reset if the passed state is - * NULL. Otherwise, we will fallback to the previous behaviour. - */ - if (!state) { - state = obj->funcs->atomic_create_state(obj); - if (IS_ERR(state)) - return PTR_ERR(state); + state = obj->funcs->atomic_create_state(obj); + if (IS_ERR(state)) + return PTR_ERR(state); - obj->state = state; - } else { - obj->state = state; - state->obj = obj; - } + obj->state = state; return 0; } EXPORT_SYMBOL(drm_atomic_private_obj_init); diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 316cf84519de54c4dc4bfb3bc3addc4990a200f5..4b120751605e15e0d07ebe1d4a7324c0ccfc34dd 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -553,11 +553,10 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, goto err_reset_bridge; } if (drm_bridge_is_atomic(bridge)) drm_atomic_private_obj_init(bridge->dev, &bridge->base, - NULL, &drm_bridge_priv_state_funcs); return 0; err_reset_bridge: diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c index 862691991ed2770d30342bf531e828e34bd7080a..e6b003c16e63609180881b1d3b0c7acbd5218ada 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -1399,11 +1399,11 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) if (ret) { dev_err(dev, "Unable to register clock notifier\n"); goto err_devclk_disable; } - drm_atomic_private_obj_init(drm, &priv->private_obj, NULL, + drm_atomic_private_obj_init(drm, &priv->private_obj, &ingenic_drm_private_state_funcs); ret = drmm_add_action_or_reset(drm, ingenic_drm_atomic_private_obj_fini, &priv->private_obj); if (ret) diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c b/drivers/gpu/drm/ingenic/ingenic-ipu.c index 253a1ce30997308547b61339468d52e6875785d3..635ef2b1efa57556f32fded612f0ff1068e23e8c 100644 --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c @@ -899,11 +899,11 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) if (err) { dev_err(dev, "Unable to prepare clock\n"); return err; } - drm_atomic_private_obj_init(drm, &ipu->private_obj, NULL, + drm_atomic_private_obj_init(drm, &ipu->private_obj, &ingenic_ipu_private_state_funcs); return 0; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index e33995a9522d2a9e8d0627069f7b5f44902278de..e52fd6b79c614a67d910e404efc24be014ec8f5e 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -1159,11 +1159,10 @@ static int dpu_kms_hw_init(struct msm_kms *kms) dev->mode_config.cursor_width = 512; dev->mode_config.cursor_height = 512; 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); diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c index 1fc9671590762b800bdeb6cd440b1ae6ee634679..c41bb03e5b96a162340b886d32656dfe4b0d1a99 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@ -715,11 +715,10 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev) int ret; mdp5_kms->dev = dev; drm_atomic_private_obj_init(mdp5_kms->dev, &mdp5_kms->glob_state, - NULL, &mdp5_global_state_funcs); /* we need to set a default rate before enabling. Set a safe * rate first, then figure out hw revision, and then set a * more optimal rate: diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index febee3fea01dd40faec7d631279b1393a17822ba..27de798026365f710b78306a7ec2a72ddff20828 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -297,11 +297,11 @@ static const struct drm_private_state_funcs omap_global_state_funcs = { static int omap_global_obj_init(struct drm_device *dev) { struct omap_drm_private *priv = dev->dev_private; - drm_atomic_private_obj_init(dev, &priv->glob_obj, NULL, + drm_atomic_private_obj_init(dev, &priv->glob_obj, &omap_global_state_funcs); return 0; } static void omap_global_obj_fini(struct omap_drm_private *priv) diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c index e8cc4382532fffaea99020755ad78d3252613c26..5c7fd36aaadc405b9dae0acb1e8b4f12f12c84bd 100644 --- a/drivers/gpu/drm/tegra/hub.c +++ b/drivers/gpu/drm/tegra/hub.c @@ -955,11 +955,11 @@ static int tegra_display_hub_init(struct host1x_client *client) { struct tegra_display_hub *hub = to_tegra_display_hub(client); struct drm_device *drm = dev_get_drvdata(client->host); struct tegra_drm *tegra = drm->dev_private; - drm_atomic_private_obj_init(drm, &hub->base, NULL, + drm_atomic_private_obj_init(drm, &hub->base, &tegra_display_hub_state_funcs); tegra->hub = hub; return 0; diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c index f82c7ea1d74eeaa075296533a1ffe3561f197748..8f60e9e98380984a0de7c9243c5ba703316d0c13 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@ -114,11 +114,11 @@ static void vc4_ctm_obj_fini(struct drm_device *dev, void *unused) static int vc4_ctm_obj_init(struct vc4_dev *vc4) { drm_modeset_lock_init(&vc4->ctm_state_lock); - drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, NULL, + drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, &vc4_ctm_state_funcs); return drmm_add_action_or_reset(&vc4->base, vc4_ctm_obj_fini, NULL); } @@ -755,11 +755,10 @@ static void vc4_load_tracker_obj_fini(struct drm_device *dev, void *unused) } static int vc4_load_tracker_obj_init(struct vc4_dev *vc4) { drm_atomic_private_obj_init(&vc4->base, &vc4->load_tracker, - NULL, &vc4_load_tracker_state_funcs); return drmm_add_action_or_reset(&vc4->base, vc4_load_tracker_obj_fini, NULL); } @@ -847,11 +846,10 @@ static void vc4_hvs_channels_obj_fini(struct drm_device *dev, void *unused) } static int vc4_hvs_channels_obj_init(struct vc4_dev *vc4) { drm_atomic_private_obj_init(&vc4->base, &vc4->hvs_channels, - NULL, &vc4_hvs_state_funcs); return drmm_add_action_or_reset(&vc4->base, vc4_hvs_channels_obj_fini, NULL); } diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index 0b1b32bcd2bda1b92299fd369ba7c23b1c2d3dfa..f03cd199aee73fa8e15b2d9e16a53d134fc7de7d 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -736,11 +736,10 @@ struct drm_connector_state * __must_check drm_atomic_get_connector_state(struct drm_atomic_state *state, struct drm_connector *connector); int drm_atomic_private_obj_init(struct drm_device *dev, struct drm_private_obj *obj, - struct drm_private_state *state, const struct drm_private_state_funcs *funcs); void drm_atomic_private_obj_fini(struct drm_private_obj *obj); struct drm_private_state * __must_check drm_atomic_get_private_obj_state(struct drm_atomic_state *state, -- 2.52.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 15/15] drm/atomic: Remove state argument to drm_atomic_private_obj_init 2026-01-19 12:50 ` [PATCH v3 15/15] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard @ 2026-01-20 14:45 ` Liviu Dudau 0 siblings, 0 replies; 5+ messages in thread From: Liviu Dudau @ 2026-01-20 14:45 UTC (permalink / raw) To: Maxime Ripard Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel, Dmitry Baryshkov, Tomi Valkeinen, Andrzej Hajda, Neil Armstrong, Robert Foss, Paul Cercueil, Thierry Reding, Mikko Perttunen, Jonathan Hunter, Dave Stevenson, Rodrigo Siqueira, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten, Maíra Canal, Raspberry Pi Kernel Maintenance, amd-gfx, linux-mips, linux-arm-msm, freedreno, linux-tegra On Mon, Jan 19, 2026 at 01:50:11PM +0100, Maxime Ripard wrote: > Now that all drm_private_objs users have been converted to use > atomic_create_state instead of the old ad-hoc initialization, we can > remove the state parameter from drm_private_obj_init and the fallback > code. > > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> > Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > Signed-off-by: Maxime Ripard <mripard@kernel.org> > --- > > To: Liviu Dudau <liviu.dudau@arm.com> > To: Andrzej Hajda <andrzej.hajda@intel.com> > To: Neil Armstrong <neil.armstrong@linaro.org> > To: Robert Foss <rfoss@kernel.org> > To: Paul Cercueil <paul@crapouillou.net> > To: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > To: Thierry Reding <thierry.reding@gmail.com> > To: Mikko Perttunen <mperttunen@nvidia.com> > To: Jonathan Hunter <jonathanh@nvidia.com> > To: Dave Stevenson <dave.stevenson@raspberrypi.com> > Cc: Rodrigo Siqueira <siqueira@igalia.com> > Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> > Cc: Jonas Karlman <jonas@kwiboo.se> > Cc: Jernej Skrabec <jernej.skrabec@gmail.com> > Cc: Abhinav Kumar <abhinav.kumar@linux.dev> > Cc: Jessica Zhang <jessica.zhang@oss.qualcomm.com> > Cc: Sean Paul <sean@poorly.run> > Cc: Marijn Suijten <marijn.suijten@somainline.org> > Cc: "Maíra Canal" <mcanal@igalia.com> > Cc: Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com> > Cc: amd-gfx@lists.freedesktop.org > Cc: linux-mips@vger.kernel.org > Cc: linux-arm-msm@vger.kernel.org > Cc: freedreno@lists.freedesktop.org > Cc: linux-tegra@vger.kernel.org > --- > drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 - > .../drm/arm/display/komeda/komeda_private_obj.c | 16 ++++++++-------- For the komeda part: Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Best regards, Liviu > drivers/gpu/drm/display/drm_dp_mst_topology.c | 1 - > drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +- > drivers/gpu/drm/drm_atomic.c | 22 +++++----------------- > drivers/gpu/drm/drm_bridge.c | 1 - > drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 2 +- > drivers/gpu/drm/ingenic/ingenic-ipu.c | 2 +- > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 - > drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 1 - > drivers/gpu/drm/omapdrm/omap_drv.c | 2 +- > drivers/gpu/drm/tegra/hub.c | 2 +- > drivers/gpu/drm/vc4/vc4_kms.c | 4 +--- > include/drm/drm_atomic.h | 1 - > 14 files changed, 19 insertions(+), 39 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > index a97e1bf1bfdc6384a6ac83f907878807bb3b62a0..cff3d00a367728449b4a4de4cc9f3c9036e3924f 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -4932,11 +4932,10 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) > /* indicates support for immediate flip */ > adev_to_drm(adev)->mode_config.async_page_flip = true; > > drm_atomic_private_obj_init(adev_to_drm(adev), > &adev->dm.atomic_obj, > - NULL, > &dm_atomic_state_funcs); > > r = amdgpu_display_modeset_create_props(adev); > if (r) > return r; > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c > index 4994b69c6595637ea832b97629b052e3aea97ee7..6270e5c525db221267b1215a27653ace578eeb0a 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c > @@ -63,11 +63,11 @@ static const struct drm_private_state_funcs komeda_layer_obj_funcs = { > }; > > static int komeda_layer_obj_add(struct komeda_kms_dev *kms, > struct komeda_layer *layer) > { > - drm_atomic_private_obj_init(&kms->base, &layer->base.obj, NULL, > + drm_atomic_private_obj_init(&kms->base, &layer->base.obj, > &komeda_layer_obj_funcs); > return 0; > } > > static struct drm_private_state * > @@ -116,11 +116,11 @@ static const struct drm_private_state_funcs komeda_scaler_obj_funcs = { > > static int komeda_scaler_obj_add(struct komeda_kms_dev *kms, > struct komeda_scaler *scaler) > { > drm_atomic_private_obj_init(&kms->base, > - &scaler->base.obj, NULL, > + &scaler->base.obj, > &komeda_scaler_obj_funcs); > return 0; > } > > static struct drm_private_state * > @@ -168,11 +168,11 @@ static const struct drm_private_state_funcs komeda_compiz_obj_funcs = { > }; > > static int komeda_compiz_obj_add(struct komeda_kms_dev *kms, > struct komeda_compiz *compiz) > { > - drm_atomic_private_obj_init(&kms->base, &compiz->base.obj, NULL, > + drm_atomic_private_obj_init(&kms->base, &compiz->base.obj, > &komeda_compiz_obj_funcs); > > return 0; > } > > @@ -222,11 +222,11 @@ static const struct drm_private_state_funcs komeda_splitter_obj_funcs = { > > static int komeda_splitter_obj_add(struct komeda_kms_dev *kms, > struct komeda_splitter *splitter) > { > drm_atomic_private_obj_init(&kms->base, > - &splitter->base.obj, NULL, > + &splitter->base.obj, > &komeda_splitter_obj_funcs); > > return 0; > } > > @@ -275,11 +275,11 @@ static const struct drm_private_state_funcs komeda_merger_obj_funcs = { > > static int komeda_merger_obj_add(struct komeda_kms_dev *kms, > struct komeda_merger *merger) > { > drm_atomic_private_obj_init(&kms->base, > - &merger->base.obj, NULL, > + &merger->base.obj, > &komeda_merger_obj_funcs); > > return 0; > } > > @@ -328,11 +328,11 @@ static const struct drm_private_state_funcs komeda_improc_obj_funcs = { > }; > > static int komeda_improc_obj_add(struct komeda_kms_dev *kms, > struct komeda_improc *improc) > { > - drm_atomic_private_obj_init(&kms->base, &improc->base.obj, NULL, > + drm_atomic_private_obj_init(&kms->base, &improc->base.obj, > &komeda_improc_obj_funcs); > > return 0; > } > > @@ -381,11 +381,11 @@ static const struct drm_private_state_funcs komeda_timing_ctrlr_obj_funcs = { > }; > > static int komeda_timing_ctrlr_obj_add(struct komeda_kms_dev *kms, > struct komeda_timing_ctrlr *ctrlr) > { > - drm_atomic_private_obj_init(&kms->base, &ctrlr->base.obj, NULL, > + drm_atomic_private_obj_init(&kms->base, &ctrlr->base.obj, > &komeda_timing_ctrlr_obj_funcs); > > return 0; > } > > @@ -435,11 +435,11 @@ static const struct drm_private_state_funcs komeda_pipeline_obj_funcs = { > }; > > static int komeda_pipeline_obj_add(struct komeda_kms_dev *kms, > struct komeda_pipeline *pipe) > { > - drm_atomic_private_obj_init(&kms->base, &pipe->obj, NULL, > + drm_atomic_private_obj_init(&kms->base, &pipe->obj, > &komeda_pipeline_obj_funcs); > > return 0; > } > > diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c > index 1ab0233a2a18f784d8c43e61b94e40a06bd4baf6..7e0e5b90df7251beed6985e16d1c3270ddfb3f37 100644 > --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c > +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c > @@ -5763,11 +5763,10 @@ int drm_dp_mst_topology_mgr_init(struct drm_dp_mst_topology_mgr *mgr, > mgr->max_dpcd_transaction_bytes = max_dpcd_transaction_bytes; > mgr->max_payloads = max_payloads; > mgr->conn_base_id = conn_base_id; > > drm_atomic_private_obj_init(dev, &mgr->base, > - NULL, > &drm_dp_mst_topology_state_funcs); > > return 0; > } > EXPORT_SYMBOL(drm_dp_mst_topology_mgr_init); > diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/display/drm_dp_tunnel.c > index 2abd714efd19f27697770813b38194e384be87ce..241498cef7de497afdf2837f750113743c001240 100644 > --- a/drivers/gpu/drm/display/drm_dp_tunnel.c > +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c > @@ -1598,11 +1598,11 @@ static bool init_group(struct drm_dp_tunnel_mgr *mgr, struct drm_dp_tunnel_group > { > group->mgr = mgr; > group->available_bw = -1; > INIT_LIST_HEAD(&group->tunnels); > > - drm_atomic_private_obj_init(mgr->dev, &group->base, NULL, > + drm_atomic_private_obj_init(mgr->dev, &group->base, > &tunnel_group_funcs); > > return true; > } > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index e3029c8f02e5a3698781117bcc80eff98407cf16..243579fa1c756cd2eda660ad658cb49d67106584 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -919,11 +919,10 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, > > /** > * drm_atomic_private_obj_init - initialize private object > * @dev: DRM device this object will be attached to > * @obj: private object > - * @state: initial private object state > * @funcs: pointer to the struct of function pointers that identify the object > * type > * > * Initialize the private object, which can be embedded into any > * driver private object that needs its own atomic state. > @@ -931,37 +930,26 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, > * RETURNS: > * Zero on success, error code on failure > */ > int drm_atomic_private_obj_init(struct drm_device *dev, > struct drm_private_obj *obj, > - struct drm_private_state *state, > const struct drm_private_state_funcs *funcs) > { > + struct drm_private_state *state; > memset(obj, 0, sizeof(*obj)); > > drm_modeset_lock_init(&obj->lock); > > obj->dev = dev; > obj->funcs = funcs; > list_add_tail(&obj->head, &dev->mode_config.privobj_list); > > - /* > - * Not all users of drm_atomic_private_obj_init have been > - * converted to using &drm_private_obj_funcs.atomic_create_state yet. > - * For the time being, let's only call reset if the passed state is > - * NULL. Otherwise, we will fallback to the previous behaviour. > - */ > - if (!state) { > - state = obj->funcs->atomic_create_state(obj); > - if (IS_ERR(state)) > - return PTR_ERR(state); > + state = obj->funcs->atomic_create_state(obj); > + if (IS_ERR(state)) > + return PTR_ERR(state); > > - obj->state = state; > - } else { > - obj->state = state; > - state->obj = obj; > - } > + obj->state = state; > > return 0; > } > EXPORT_SYMBOL(drm_atomic_private_obj_init); > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > index 316cf84519de54c4dc4bfb3bc3addc4990a200f5..4b120751605e15e0d07ebe1d4a7324c0ccfc34dd 100644 > --- a/drivers/gpu/drm/drm_bridge.c > +++ b/drivers/gpu/drm/drm_bridge.c > @@ -553,11 +553,10 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, > goto err_reset_bridge; > } > > if (drm_bridge_is_atomic(bridge)) > drm_atomic_private_obj_init(bridge->dev, &bridge->base, > - NULL, > &drm_bridge_priv_state_funcs); > > return 0; > > err_reset_bridge: > diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > index 862691991ed2770d30342bf531e828e34bd7080a..e6b003c16e63609180881b1d3b0c7acbd5218ada 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > @@ -1399,11 +1399,11 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) > if (ret) { > dev_err(dev, "Unable to register clock notifier\n"); > goto err_devclk_disable; > } > > - drm_atomic_private_obj_init(drm, &priv->private_obj, NULL, > + drm_atomic_private_obj_init(drm, &priv->private_obj, > &ingenic_drm_private_state_funcs); > > ret = drmm_add_action_or_reset(drm, ingenic_drm_atomic_private_obj_fini, > &priv->private_obj); > if (ret) > diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c b/drivers/gpu/drm/ingenic/ingenic-ipu.c > index 253a1ce30997308547b61339468d52e6875785d3..635ef2b1efa57556f32fded612f0ff1068e23e8c 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c > +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c > @@ -899,11 +899,11 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) > if (err) { > dev_err(dev, "Unable to prepare clock\n"); > return err; > } > > - drm_atomic_private_obj_init(drm, &ipu->private_obj, NULL, > + drm_atomic_private_obj_init(drm, &ipu->private_obj, > &ingenic_ipu_private_state_funcs); > > return 0; > } > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > index e33995a9522d2a9e8d0627069f7b5f44902278de..e52fd6b79c614a67d910e404efc24be014ec8f5e 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > @@ -1159,11 +1159,10 @@ static int dpu_kms_hw_init(struct msm_kms *kms) > > dev->mode_config.cursor_width = 512; > dev->mode_config.cursor_height = 512; > > 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); > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c > index 1fc9671590762b800bdeb6cd440b1ae6ee634679..c41bb03e5b96a162340b886d32656dfe4b0d1a99 100644 > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c > @@ -715,11 +715,10 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev) > int ret; > > mdp5_kms->dev = dev; > > drm_atomic_private_obj_init(mdp5_kms->dev, &mdp5_kms->glob_state, > - NULL, > &mdp5_global_state_funcs); > > /* we need to set a default rate before enabling. Set a safe > * rate first, then figure out hw revision, and then set a > * more optimal rate: > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c > index febee3fea01dd40faec7d631279b1393a17822ba..27de798026365f710b78306a7ec2a72ddff20828 100644 > --- a/drivers/gpu/drm/omapdrm/omap_drv.c > +++ b/drivers/gpu/drm/omapdrm/omap_drv.c > @@ -297,11 +297,11 @@ static const struct drm_private_state_funcs omap_global_state_funcs = { > > static int omap_global_obj_init(struct drm_device *dev) > { > struct omap_drm_private *priv = dev->dev_private; > > - drm_atomic_private_obj_init(dev, &priv->glob_obj, NULL, > + drm_atomic_private_obj_init(dev, &priv->glob_obj, > &omap_global_state_funcs); > return 0; > } > > static void omap_global_obj_fini(struct omap_drm_private *priv) > diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c > index e8cc4382532fffaea99020755ad78d3252613c26..5c7fd36aaadc405b9dae0acb1e8b4f12f12c84bd 100644 > --- a/drivers/gpu/drm/tegra/hub.c > +++ b/drivers/gpu/drm/tegra/hub.c > @@ -955,11 +955,11 @@ static int tegra_display_hub_init(struct host1x_client *client) > { > struct tegra_display_hub *hub = to_tegra_display_hub(client); > struct drm_device *drm = dev_get_drvdata(client->host); > struct tegra_drm *tegra = drm->dev_private; > > - drm_atomic_private_obj_init(drm, &hub->base, NULL, > + drm_atomic_private_obj_init(drm, &hub->base, > &tegra_display_hub_state_funcs); > > tegra->hub = hub; > > return 0; > diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c > index f82c7ea1d74eeaa075296533a1ffe3561f197748..8f60e9e98380984a0de7c9243c5ba703316d0c13 100644 > --- a/drivers/gpu/drm/vc4/vc4_kms.c > +++ b/drivers/gpu/drm/vc4/vc4_kms.c > @@ -114,11 +114,11 @@ static void vc4_ctm_obj_fini(struct drm_device *dev, void *unused) > > static int vc4_ctm_obj_init(struct vc4_dev *vc4) > { > drm_modeset_lock_init(&vc4->ctm_state_lock); > > - drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, NULL, > + drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, > &vc4_ctm_state_funcs); > > return drmm_add_action_or_reset(&vc4->base, vc4_ctm_obj_fini, NULL); > } > > @@ -755,11 +755,10 @@ static void vc4_load_tracker_obj_fini(struct drm_device *dev, void *unused) > } > > static int vc4_load_tracker_obj_init(struct vc4_dev *vc4) > { > drm_atomic_private_obj_init(&vc4->base, &vc4->load_tracker, > - NULL, > &vc4_load_tracker_state_funcs); > > return drmm_add_action_or_reset(&vc4->base, vc4_load_tracker_obj_fini, NULL); > } > > @@ -847,11 +846,10 @@ static void vc4_hvs_channels_obj_fini(struct drm_device *dev, void *unused) > } > > static int vc4_hvs_channels_obj_init(struct vc4_dev *vc4) > { > drm_atomic_private_obj_init(&vc4->base, &vc4->hvs_channels, > - NULL, > &vc4_hvs_state_funcs); > > return drmm_add_action_or_reset(&vc4->base, vc4_hvs_channels_obj_fini, NULL); > } > > diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h > index 0b1b32bcd2bda1b92299fd369ba7c23b1c2d3dfa..f03cd199aee73fa8e15b2d9e16a53d134fc7de7d 100644 > --- a/include/drm/drm_atomic.h > +++ b/include/drm/drm_atomic.h > @@ -736,11 +736,10 @@ struct drm_connector_state * __must_check > drm_atomic_get_connector_state(struct drm_atomic_state *state, > struct drm_connector *connector); > > int drm_atomic_private_obj_init(struct drm_device *dev, > struct drm_private_obj *obj, > - struct drm_private_state *state, > const struct drm_private_state_funcs *funcs); > void drm_atomic_private_obj_fini(struct drm_private_obj *obj); > > struct drm_private_state * __must_check > drm_atomic_get_private_obj_state(struct drm_atomic_state *state, > > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-01-20 14:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-01-19 12:49 [PATCH v3 00/15] drm/atomic: Allocate drm_private_state through a callback Maxime Ripard 2026-01-19 12:50 ` [PATCH v3 09/15] drm/ingenic: Switch private_obj initialization to atomic_create_state Maxime Ripard 2026-01-19 16:18 ` Paul Cercueil 2026-01-19 12:50 ` [PATCH v3 15/15] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard 2026-01-20 14:45 ` Liviu Dudau
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox