* [PATCH 00/16] drm/atomic: Switch drm_private_obj to reset
@ 2025-10-08 12:03 Maxime Ripard
2025-10-08 12:04 ` [PATCH 09/16] drm/ingenic: Switch private_obj initialization " Maxime Ripard
2025-10-08 12:04 ` [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard
0 siblings, 2 replies; 5+ messages in thread
From: Maxime Ripard @ 2025-10-08 12:03 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, 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>
---
Maxime Ripard (16):
drm/atomic: Add dev pointer to drm_private_obj
drm/atomic: Add reset to drm_private_obj
drm/atomic-helper: Add private_obj reset helper
drm/bridge: Switch private_obj initialization to reset
drm/dp_mst: Switch private_obj initialization to reset
drm/dp_tunnel: Switch private_obj initialization to reset
drm/amdgpu: Switch private_obj initialization to reset
drm/arm: komeda: Switch private_obj initialization to reset
drm/ingenic: Switch private_obj initialization to reset
drm/msm: mdp5: Switch private_obj initialization to reset
drm/msm: dpu1: Switch private_obj initialization to reset
drm/omapdrm: Switch private_obj initialization to reset
drm/tegra: Switch private_obj initialization to reset
drm/vc4: Switch private_obj initialization to reset
drm/atomic: Remove state argument to drm_atomic_private_obj_init
drm/mode_config: Call private obj reset with the other objects
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 53 ++---
.../gpu/drm/arm/display/komeda/komeda_pipeline.h | 2 +
.../drm/arm/display/komeda/komeda_private_obj.c | 232 +++++++++++++++------
drivers/gpu/drm/display/drm_dp_mst_topology.c | 38 ++--
drivers/gpu/drm/display/drm_dp_tunnel.c | 28 ++-
drivers/gpu/drm/drm_atomic.c | 6 +-
drivers/gpu/drm/drm_atomic_state_helper.c | 24 +++
drivers/gpu/drm/drm_bridge.c | 30 +--
drivers/gpu/drm/drm_mode_config.c | 6 +
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 30 ++-
drivers/gpu/drm/ingenic/ingenic-ipu.c | 30 +--
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 30 ++-
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 30 ++-
drivers/gpu/drm/omapdrm/omap_drv.c | 24 ++-
drivers/gpu/drm/tegra/hub.c | 24 ++-
drivers/gpu/drm/vc4/vc4_kms.c | 73 +++++--
include/drm/drm_atomic.h | 15 +-
include/drm/drm_atomic_state_helper.h | 3 +
18 files changed, 473 insertions(+), 205 deletions(-)
---
base-commit: aa1c2b073ad23847dd2e7bdc7d30009f34ed7f59
change-id: 20251008-drm-private-obj-reset-ae1e2741027a
Best regards,
--
Maxime Ripard <mripard@kernel.org>
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 09/16] drm/ingenic: Switch private_obj initialization to reset 2025-10-08 12:03 [PATCH 00/16] drm/atomic: Switch drm_private_obj to reset Maxime Ripard @ 2025-10-08 12:04 ` Maxime Ripard 2025-10-08 12:04 ` [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard 1 sibling, 0 replies; 5+ messages in thread From: Maxime Ripard @ 2025-10-08 12:04 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 reset 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 | 30 +++++++++++++++++++----------- drivers/gpu/drm/ingenic/ingenic-ipu.c | 30 ++++++++++++++++++------------ 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c index 9db1ceaed5188a4ef0897280dc72108eb3815b5f..18f20d96f6e4a7d9e5209ee770c7b4fc81adbad7 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -947,10 +947,26 @@ 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 void ingenic_drm_reset(struct drm_private_obj *obj) +{ + struct ingenic_drm_private_state *priv_state; + + if (obj->state) { + ingenic_drm_destroy_state(obj, obj->state); + obj->state = NULL; + } + + priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL); + if (!priv_state) + return; + + __drm_atomic_helper_private_obj_reset(obj, &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", @@ -1029,10 +1045,11 @@ static struct drm_mode_config_helper_funcs ingenic_drm_mode_config_helpers = { }; static const struct drm_private_state_funcs ingenic_drm_private_state_funcs = { .atomic_duplicate_state = ingenic_drm_duplicate_state, .atomic_destroy_state = ingenic_drm_destroy_state, + .reset = ingenic_drm_reset, }; static void ingenic_drm_unbind_all(void *d) { struct ingenic_drm *priv = d; @@ -1080,11 +1097,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; @@ -1380,23 +1396,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; @@ -1404,12 +1414,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 26ebf424d63ec21ccee80221745c3e8bcc6b3d7f..ddaf80052f03b8e366c89a6562b430a400b6dacd 100644 --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c @@ -748,13 +748,30 @@ 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 void ingenic_ipu_reset(struct drm_private_obj *obj) +{ + struct ingenic_ipu_private_state *priv_state; + + if (obj->state) { + ingenic_ipu_destroy_state(obj, obj->state); + obj->state = NULL; + } + + priv_state = kzalloc(sizeof(*priv_state), GFP_KERNEL); + if (!priv_state) + return; + + __drm_atomic_helper_private_obj_reset(obj, &priv_state->base); +} + static const struct drm_private_state_funcs ingenic_ipu_private_state_funcs = { .atomic_duplicate_state = ingenic_ipu_duplicate_state, .atomic_destroy_state = ingenic_ipu_destroy_state, + .reset = ingenic_ipu_reset, }; static irqreturn_t ingenic_ipu_irq_handler(int irq, void *arg) { struct ingenic_ipu *ipu = arg; @@ -791,11 +808,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 +901,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.51.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init 2025-10-08 12:03 [PATCH 00/16] drm/atomic: Switch drm_private_obj to reset Maxime Ripard 2025-10-08 12:04 ` [PATCH 09/16] drm/ingenic: Switch private_obj initialization " Maxime Ripard @ 2025-10-08 12:04 ` Maxime Ripard 2025-10-08 13:30 ` Tomi Valkeinen 2025-10-08 18:50 ` Dmitry Baryshkov 1 sibling, 2 replies; 5+ messages in thread From: Maxime Ripard @ 2025-10-08 12:04 UTC (permalink / raw) To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter Cc: dri-devel, Maxime Ripard, Liviu Dudau, Andrzej Hajda, Neil Armstrong, Robert Foss, Paul Cercueil, Tomi Valkeinen, 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 reset instead of the old ad-hoc initialization, we can remove the state parameter from drm_private_obj_init and the fallback code. 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 - drivers/gpu/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 | 17 ++--------------- 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, 16 insertions(+), 37 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 1bcbfd814d53bb443b7503ffacb109c900b67b5f..a8b2c7639440dbf16baa2741490db193019f7bc4 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -4729,11 +4729,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 0c7b7a5dd10900016f64df2a86d54f9178d1cf5e..403f9c10d4cd1e70319d40c2ad267ab76fd24bff 100644 --- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c +++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c @@ -66,11 +66,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 * @@ -122,11 +122,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 * @@ -177,11 +177,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; } @@ -234,11 +234,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; } @@ -290,11 +290,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; } @@ -346,11 +346,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; } @@ -402,11 +402,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; } @@ -459,11 +459,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 255fbdcea9f0b6376d15439e3da1dc02be472a20..2831e0b77ab120ef313ad44b0f35df37a0fb59dd 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -5764,11 +5764,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 ae6c6ca99417bf7d99186dd2648f0525c633a8d5..b6e6f0e01c972db2def5164deeff34838ede544f 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -1601,11 +1601,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 45c26294e712fd36b43e87548072c3c0e9af1887..e409919b0ccb632e869b4a6f8462731484755b73 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -773,44 +773,31 @@ 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. */ void 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) { 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.reset 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) { - if (obj->funcs->reset) - obj->funcs->reset(obj); - } else { - obj->state = state; - state->obj = obj; - } + if (obj->funcs->reset) + obj->funcs->reset(obj); } EXPORT_SYMBOL(drm_atomic_private_obj_init); /** * drm_atomic_private_obj_fini - finalize private object diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cc346412b0205288ec7ee5a7d80a897ad9659404..107bf1d984511496a3766d77de4d1e8a821eaeef 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -478,11 +478,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 18f20d96f6e4a7d9e5209ee770c7b4fc81adbad7..a721353a9cba410f002c81d082eb2601c1830024 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -1396,11 +1396,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 ddaf80052f03b8e366c89a6562b430a400b6dacd..e4de737d159e03a1e61015e42e000a83c9231357 100644 --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c @@ -901,11 +901,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 04baf072e8510ce8260f1ec609ba8f2b22f7c11e..d7257e888269aa0b4add4d3a911a9403ef590582 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -403,11 +403,10 @@ static const struct drm_private_state_funcs dpu_kms_global_state_funcs = { }; static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms) { drm_atomic_private_obj_init(dpu_kms->dev, &dpu_kms->global_state, - NULL, &dpu_kms_global_state_funcs); return 0; } diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c index 44aef7eb8e9073bc9a4bab03c1d6c41313c56ac7..893f29a1fbdd51d22425f52638c74cc97cbe95bf 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@ -151,11 +151,10 @@ static const struct drm_private_state_funcs mdp5_global_state_funcs = { }; static int mdp5_global_obj_init(struct mdp5_kms *mdp5_kms) { drm_atomic_private_obj_init(mdp5_kms->dev, &mdp5_kms->glob_state, - NULL, &mdp5_global_state_funcs); return 0; } static void mdp5_enable_commit(struct msm_kms *kms) diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index 4c556da5a5cae3685d929679f43260c51459e8a9..c14e8648b86044c90d2f9e93dbbe497086289f4f 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -298,11 +298,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 6cae71bc3744a22e4b3804b19869e8b16fd60ecd..67e3b8ca4a5204fd29a64b0c80a5290bb6b093ea 100644 --- a/drivers/gpu/drm/tegra/hub.c +++ b/drivers/gpu/drm/tegra/hub.c @@ -956,11 +956,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 f50ffc1c4b62ae3e180743f9cad4c6d0bc62a922..b1f2fb29a97b5cd23d819af9ff4ff407a511d2dc 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@ -115,11 +115,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); } @@ -758,11 +758,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); } @@ -852,11 +851,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 fbac6d4c75fc86535cf153745b6132f8705c808a..68e30bce7b318ea524df9b47a9e88bb0c7b77c6b 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -617,11 +617,10 @@ struct drm_connector_state * __must_check drm_atomic_get_connector_state(struct drm_atomic_state *state, struct drm_connector *connector); void 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.51.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init 2025-10-08 12:04 ` [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard @ 2025-10-08 13:30 ` Tomi Valkeinen 2025-10-08 18:50 ` Dmitry Baryshkov 1 sibling, 0 replies; 5+ messages in thread From: Tomi Valkeinen @ 2025-10-08 13:30 UTC (permalink / raw) To: Maxime Ripard Cc: dri-devel, 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, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter Hi, On 08/10/2025 15:04, Maxime Ripard wrote: > Now that all drm_private_objs users have been converted to use reset > instead of the old ad-hoc initialization, we can remove the state > parameter from drm_private_obj_init and the fallback code. > > Signed-off-by: Maxime Ripard <mripard@kernel.org> > > --- Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Tomi > > 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 - > drivers/gpu/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 | 17 ++--------------- > 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, 16 insertions(+), 37 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 1bcbfd814d53bb443b7503ffacb109c900b67b5f..a8b2c7639440dbf16baa2741490db193019f7bc4 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -4729,11 +4729,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 0c7b7a5dd10900016f64df2a86d54f9178d1cf5e..403f9c10d4cd1e70319d40c2ad267ab76fd24bff 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c > @@ -66,11 +66,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 * > @@ -122,11 +122,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 * > @@ -177,11 +177,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; > } > > @@ -234,11 +234,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; > } > > @@ -290,11 +290,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; > } > > @@ -346,11 +346,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; > } > > @@ -402,11 +402,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; > } > > @@ -459,11 +459,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 255fbdcea9f0b6376d15439e3da1dc02be472a20..2831e0b77ab120ef313ad44b0f35df37a0fb59dd 100644 > --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c > +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c > @@ -5764,11 +5764,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 ae6c6ca99417bf7d99186dd2648f0525c633a8d5..b6e6f0e01c972db2def5164deeff34838ede544f 100644 > --- a/drivers/gpu/drm/display/drm_dp_tunnel.c > +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c > @@ -1601,11 +1601,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 45c26294e712fd36b43e87548072c3c0e9af1887..e409919b0ccb632e869b4a6f8462731484755b73 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -773,44 +773,31 @@ 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. > */ > void > 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) > { > 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.reset 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) { > - if (obj->funcs->reset) > - obj->funcs->reset(obj); > - } else { > - obj->state = state; > - state->obj = obj; > - } > + if (obj->funcs->reset) > + obj->funcs->reset(obj); > } > EXPORT_SYMBOL(drm_atomic_private_obj_init); > > /** > * drm_atomic_private_obj_fini - finalize private object > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > index cc346412b0205288ec7ee5a7d80a897ad9659404..107bf1d984511496a3766d77de4d1e8a821eaeef 100644 > --- a/drivers/gpu/drm/drm_bridge.c > +++ b/drivers/gpu/drm/drm_bridge.c > @@ -478,11 +478,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 18f20d96f6e4a7d9e5209ee770c7b4fc81adbad7..a721353a9cba410f002c81d082eb2601c1830024 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c > @@ -1396,11 +1396,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 ddaf80052f03b8e366c89a6562b430a400b6dacd..e4de737d159e03a1e61015e42e000a83c9231357 100644 > --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c > +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c > @@ -901,11 +901,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 04baf072e8510ce8260f1ec609ba8f2b22f7c11e..d7257e888269aa0b4add4d3a911a9403ef590582 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > @@ -403,11 +403,10 @@ static const struct drm_private_state_funcs dpu_kms_global_state_funcs = { > }; > > static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms) > { > drm_atomic_private_obj_init(dpu_kms->dev, &dpu_kms->global_state, > - NULL, > &dpu_kms_global_state_funcs); > > return 0; > } > > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c > index 44aef7eb8e9073bc9a4bab03c1d6c41313c56ac7..893f29a1fbdd51d22425f52638c74cc97cbe95bf 100644 > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c > @@ -151,11 +151,10 @@ static const struct drm_private_state_funcs mdp5_global_state_funcs = { > }; > > static int mdp5_global_obj_init(struct mdp5_kms *mdp5_kms) > { > drm_atomic_private_obj_init(mdp5_kms->dev, &mdp5_kms->glob_state, > - NULL, > &mdp5_global_state_funcs); > return 0; > } > > static void mdp5_enable_commit(struct msm_kms *kms) > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c > index 4c556da5a5cae3685d929679f43260c51459e8a9..c14e8648b86044c90d2f9e93dbbe497086289f4f 100644 > --- a/drivers/gpu/drm/omapdrm/omap_drv.c > +++ b/drivers/gpu/drm/omapdrm/omap_drv.c > @@ -298,11 +298,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 6cae71bc3744a22e4b3804b19869e8b16fd60ecd..67e3b8ca4a5204fd29a64b0c80a5290bb6b093ea 100644 > --- a/drivers/gpu/drm/tegra/hub.c > +++ b/drivers/gpu/drm/tegra/hub.c > @@ -956,11 +956,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 f50ffc1c4b62ae3e180743f9cad4c6d0bc62a922..b1f2fb29a97b5cd23d819af9ff4ff407a511d2dc 100644 > --- a/drivers/gpu/drm/vc4/vc4_kms.c > +++ b/drivers/gpu/drm/vc4/vc4_kms.c > @@ -115,11 +115,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); > } > > @@ -758,11 +758,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); > } > > @@ -852,11 +851,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 fbac6d4c75fc86535cf153745b6132f8705c808a..68e30bce7b318ea524df9b47a9e88bb0c7b77c6b 100644 > --- a/include/drm/drm_atomic.h > +++ b/include/drm/drm_atomic.h > @@ -617,11 +617,10 @@ struct drm_connector_state * __must_check > drm_atomic_get_connector_state(struct drm_atomic_state *state, > struct drm_connector *connector); > > void 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, > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init 2025-10-08 12:04 ` [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard 2025-10-08 13:30 ` Tomi Valkeinen @ 2025-10-08 18:50 ` Dmitry Baryshkov 1 sibling, 0 replies; 5+ messages in thread From: Dmitry Baryshkov @ 2025-10-08 18:50 UTC (permalink / raw) To: Maxime Ripard Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel, Liviu Dudau, Andrzej Hajda, Neil Armstrong, Robert Foss, Paul Cercueil, Tomi Valkeinen, 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 Wed, Oct 08, 2025 at 02:04:13PM +0200, Maxime Ripard wrote: > Now that all drm_private_objs users have been converted to use reset > instead of the old ad-hoc initialization, we can remove the state > parameter from drm_private_obj_init and the fallback code. > > 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 - > drivers/gpu/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 | 17 ++--------------- > 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, 16 insertions(+), 37 deletions(-) > Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> -- With best wishes Dmitry ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-10-08 18:50 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-10-08 12:03 [PATCH 00/16] drm/atomic: Switch drm_private_obj to reset Maxime Ripard 2025-10-08 12:04 ` [PATCH 09/16] drm/ingenic: Switch private_obj initialization " Maxime Ripard 2025-10-08 12:04 ` [PATCH 15/16] drm/atomic: Remove state argument to drm_atomic_private_obj_init Maxime Ripard 2025-10-08 13:30 ` Tomi Valkeinen 2025-10-08 18:50 ` Dmitry Baryshkov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).