From: Maxime Ripard Date: Mon, 23 Feb 2026 10:48:20 +0000 (+0100) Subject: Merge drm/drm-next into drm-misc-next X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8b85987d3cf50178f67618122d9f3bb202f62f42;p=thirdparty%2Fkernel%2Flinux.git Merge drm/drm-next into drm-misc-next Let's merge 7.0-rc1 to start the new drm-misc-next window Signed-off-by: Maxime Ripard --- 8b85987d3cf50178f67618122d9f3bb202f62f42 diff --cc Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml index 828b7a40e9b6c,49664101a3537..7f380879fffdf --- a/Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml +++ b/Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml @@@ -82,16 -74,16 +83,25 @@@ allOf ports: properties: port@2: false + - if: + not: + properties: + compatible: + contains: + const: fsl,imx6sx-ldb + then: + required: + - reg-names + - if: + properties: + compatible: + contains: + const: fsl,imx6sx-ldb + then: + properties: + nxp,enable-termination-resistor: false + additionalProperties: false examples: diff --cc drivers/dma-buf/dma-buf.c index 1b301d96f968c,11711874a325b..1f6f6c5738e18 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@@ -1016,10 -1017,10 +1016,10 @@@ dma_buf_dynamic_attach(struct dma_buf * if (WARN_ON(!dmabuf || !dev)) return ERR_PTR(-EINVAL); - if (WARN_ON(importer_ops && !importer_ops->move_notify)) + if (WARN_ON(importer_ops && !importer_ops->invalidate_mappings)) return ERR_PTR(-EINVAL); - attach = kzalloc(sizeof(*attach), GFP_KERNEL); + attach = kzalloc_obj(*attach); if (!attach) return ERR_PTR(-ENOMEM); diff --cc drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c index 4994b69c65956,ee57e306bf7b0..49b934c6dbdf0 --- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c +++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c @@@ -40,24 -40,7 +40,24 @@@ komeda_layer_atomic_destroy_state(struc kfree(st); } +static struct drm_private_state * +komeda_layer_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_layer_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->base.obj); + komeda_component_state_reset(&st->base); + st->base.component = to_component(obj); + + return &st->base.obj; +} + static const struct drm_private_state_funcs komeda_layer_obj_funcs = { + .atomic_create_state = komeda_layer_atomic_create_state, .atomic_duplicate_state = komeda_layer_atomic_duplicate_state, .atomic_destroy_state = komeda_layer_atomic_destroy_state, }; @@@ -92,24 -82,7 +92,24 @@@ komeda_scaler_atomic_destroy_state(stru kfree(to_scaler_st(priv_to_comp_st(state))); } +static struct drm_private_state * +komeda_scaler_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_scaler_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->base.obj); + komeda_component_state_reset(&st->base); + st->base.component = to_component(obj); + + return &st->base.obj; +} + static const struct drm_private_state_funcs komeda_scaler_obj_funcs = { + .atomic_create_state = komeda_scaler_atomic_create_state, .atomic_duplicate_state = komeda_scaler_atomic_duplicate_state, .atomic_destroy_state = komeda_scaler_atomic_destroy_state, }; @@@ -145,24 -125,7 +145,24 @@@ komeda_compiz_atomic_destroy_state(stru kfree(to_compiz_st(priv_to_comp_st(state))); } +static struct drm_private_state * +komeda_compiz_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_compiz_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->base.obj); + komeda_component_state_reset(&st->base); + st->base.component = to_component(obj); + + return &st->base.obj; +} + static const struct drm_private_state_funcs komeda_compiz_obj_funcs = { + .atomic_create_state = komeda_compiz_atomic_create_state, .atomic_duplicate_state = komeda_compiz_atomic_duplicate_state, .atomic_destroy_state = komeda_compiz_atomic_destroy_state, }; @@@ -198,24 -168,7 +198,24 @@@ komeda_splitter_atomic_destroy_state(st kfree(to_splitter_st(priv_to_comp_st(state))); } +static struct drm_private_state * +komeda_splitter_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_splitter_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->base.obj); + komeda_component_state_reset(&st->base); + st->base.component = to_component(obj); + + return &st->base.obj; +} + static const struct drm_private_state_funcs komeda_splitter_obj_funcs = { + .atomic_create_state = komeda_splitter_atomic_create_state, .atomic_duplicate_state = komeda_splitter_atomic_duplicate_state, .atomic_destroy_state = komeda_splitter_atomic_destroy_state, }; @@@ -251,24 -211,7 +251,24 @@@ static void komeda_merger_atomic_destro kfree(to_merger_st(priv_to_comp_st(state))); } +static struct drm_private_state * +komeda_merger_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_merger_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->base.obj); + komeda_component_state_reset(&st->base); + st->base.component = to_component(obj); + + return &st->base.obj; +} + static const struct drm_private_state_funcs komeda_merger_obj_funcs = { + .atomic_create_state = komeda_merger_atomic_create_state, .atomic_duplicate_state = komeda_merger_atomic_duplicate_state, .atomic_destroy_state = komeda_merger_atomic_destroy_state, }; @@@ -305,24 -255,7 +305,24 @@@ komeda_improc_atomic_destroy_state(stru kfree(to_improc_st(priv_to_comp_st(state))); } +static struct drm_private_state * +komeda_improc_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_improc_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->base.obj); + komeda_component_state_reset(&st->base); + st->base.component = to_component(obj); + + return &st->base.obj; +} + static const struct drm_private_state_funcs komeda_improc_obj_funcs = { + .atomic_create_state = komeda_improc_atomic_create_state, .atomic_duplicate_state = komeda_improc_atomic_duplicate_state, .atomic_destroy_state = komeda_improc_atomic_destroy_state, }; @@@ -358,24 -298,7 +358,24 @@@ komeda_timing_ctrlr_atomic_destroy_stat kfree(to_ctrlr_st(priv_to_comp_st(state))); } +static struct drm_private_state * +komeda_timing_ctrlr_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_timing_ctrlr_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->base.obj); + komeda_component_state_reset(&st->base); + st->base.component = to_component(obj); + + return &st->base.obj; +} + static const struct drm_private_state_funcs komeda_timing_ctrlr_obj_funcs = { + .atomic_create_state = komeda_timing_ctrlr_atomic_create_state, .atomic_duplicate_state = komeda_timing_ctrlr_atomic_duplicate_state, .atomic_destroy_state = komeda_timing_ctrlr_atomic_destroy_state, }; @@@ -412,24 -342,7 +412,24 @@@ komeda_pipeline_atomic_destroy_state(st kfree(priv_to_pipe_st(state)); } +static struct drm_private_state * +komeda_pipeline_atomic_create_state(struct drm_private_obj *obj) +{ + struct komeda_pipeline_state *st; + - st = kzalloc(sizeof(*st), GFP_KERNEL); ++ st = kzalloc_obj(*st); + if (!st) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &st->obj); + st->active_comps = 0; + st->pipe = container_of(obj, struct komeda_pipeline, obj); + + return &st->obj; +} + static const struct drm_private_state_funcs komeda_pipeline_obj_funcs = { + .atomic_create_state = komeda_pipeline_atomic_create_state, .atomic_duplicate_state = komeda_pipeline_atomic_duplicate_state, .atomic_destroy_state = komeda_pipeline_atomic_destroy_state, }; diff --cc drivers/gpu/drm/display/drm_dp_mst_topology.c index 1ab0233a2a18f,170113520a432..d8a732f21d3c0 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@@ -5184,28 -5184,6 +5184,28 @@@ static void drm_dp_mst_destroy_state(st kfree(mst_state); } +static struct drm_private_state * +drm_dp_mst_atomic_create_state(struct drm_private_obj *obj) +{ + struct drm_dp_mst_topology_mgr *mgr = + to_dp_mst_topology_mgr(obj); + struct drm_dp_mst_topology_state *mst_state; + - mst_state = kzalloc(sizeof(*mst_state), GFP_KERNEL); ++ mst_state = kzalloc_obj(*mst_state); + if (!mst_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &mst_state->base); + + mst_state->total_avail_slots = 63; + mst_state->start_slot = 1; + + mst_state->mgr = mgr; + INIT_LIST_HEAD(&mst_state->payloads); + + return &mst_state->base; +} + static bool drm_dp_mst_port_downstream_of_branch(struct drm_dp_mst_port *port, struct drm_dp_mst_branch *branch) { diff --cc drivers/gpu/drm/display/drm_dp_tunnel.c index 536b5aaae7766,7aee574169029..f442430d8de78 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@@ -1497,22 -1497,7 +1497,22 @@@ static void tunnel_group_destroy_state( free_group_state(to_group_state(state)); } +static struct drm_private_state *tunnel_group_atomic_create_state(struct drm_private_obj *obj) +{ + struct drm_dp_tunnel_group_state *group_state; + - group_state = kzalloc(sizeof(*group_state), GFP_KERNEL); ++ group_state = kzalloc_obj(*group_state); + if (!group_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &group_state->base); + INIT_LIST_HEAD(&group_state->tunnel_states); + + return &group_state->base; +} + static const struct drm_private_state_funcs tunnel_group_funcs = { + .atomic_create_state = tunnel_group_atomic_create_state, .atomic_duplicate_state = tunnel_group_duplicate_state, .atomic_destroy_state = tunnel_group_destroy_state, }; diff --cc drivers/gpu/drm/drm_gem.c index c4a3de3b920e6,891c3bff5ae00..fdf08cae1c5be --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@@ -840,7 -832,8 +841,7 @@@ int drm_gem_objects_lookup(struct drm_f if (!count) return 0; - objs = kvmalloc_array(count, sizeof(*objs), GFP_KERNEL); - objs = kvmalloc_objs(struct drm_gem_object *, count, - GFP_KERNEL | __GFP_ZERO); ++ objs = kvmalloc_objs(*objs, count); if (!objs) return -ENOMEM; diff --cc drivers/gpu/drm/imagination/pvr_power.c index a0834c550a852,0cf7393f89c6b..006a72ed5064f --- a/drivers/gpu/drm/imagination/pvr_power.c +++ b/drivers/gpu/drm/imagination/pvr_power.c @@@ -614,15 -612,13 +614,15 @@@ int pvr_power_domains_init(struct pvr_d if (domain_count <= 1) return 0; - link_count = domain_count + (domain_count - 1); + if (domain_count > ARRAY_SIZE(ROGUE_PD_NAMES)) { + drm_err(drm_dev, "%s() only supports %zu domains on Rogue", + __func__, ARRAY_SIZE(ROGUE_PD_NAMES)); + return -EOPNOTSUPP; + } - domain_devs = kzalloc_objs(*domain_devs, domain_count); - if (!domain_devs) - return -ENOMEM; + link_count = domain_count - 1; - domain_links = kcalloc(link_count, sizeof(*domain_links), GFP_KERNEL); + domain_links = kzalloc_objs(*domain_links, link_count); if (!domain_links) return -ENOMEM; diff --cc drivers/gpu/drm/ingenic/ingenic-drm-drv.c index 862691991ed27,6601589339f66..9522a2e6ecd41 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@@ -954,20 -954,6 +954,20 @@@ static void ingenic_drm_destroy_state(s 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); ++ priv_state = kzalloc_obj(*priv_state); + 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 = { diff --cc drivers/gpu/drm/ingenic/ingenic-ipu.c index 253a1ce309973,289274f464ba7..4fec37c63e7cb --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c @@@ -750,22 -750,7 +750,22 @@@ static void ingenic_ipu_destroy_state(s 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); ++ priv_state = kzalloc_obj(*priv_state); + 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, }; diff --cc drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index 3ae0987cfffee,61d7e65469b3a..4495525139978 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@@ -367,24 -367,6 +367,24 @@@ static void dpu_kms_global_destroy_stat kfree(dpu_state); } +static struct drm_private_state * +dpu_kms_global_create_state(struct drm_private_obj *obj) +{ + struct drm_device *dev = obj->dev; + struct msm_drm_private *priv = dev->dev_private; + struct dpu_kms *dpu_kms = to_dpu_kms(priv->kms); + struct dpu_global_state *dpu_state; + - dpu_state = kzalloc(sizeof(*dpu_state), GFP_KERNEL); ++ dpu_state = kzalloc_obj(*dpu_state); + if (!dpu_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &dpu_state->base); + dpu_state->rm = &dpu_kms->rm; + + return &dpu_state->base; +} + static void dpu_kms_global_print_state(struct drm_printer *p, const struct drm_private_state *state) { diff --cc drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c index 1fc9671590762,8bb503e0f9620..1e3dc9bf9494c --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@@ -114,24 -114,6 +114,24 @@@ static void mdp5_global_destroy_state(s kfree(mdp5_state); } +static struct drm_private_state * +mdp5_global_create_state(struct drm_private_obj *obj) +{ + struct drm_device *dev = obj->dev; + struct msm_drm_private *priv = dev->dev_private; + struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(priv->kms)); + struct mdp5_global_state *mdp5_state; + - mdp5_state = kzalloc(sizeof(*mdp5_state), GFP_KERNEL); ++ mdp5_state = kzalloc_obj(*mdp5_state); + if (!mdp5_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &mdp5_state->base); + mdp5_state->mdp5_kms = mdp5_kms; + + return &mdp5_state->base; +} + static void mdp5_global_print_state(struct drm_printer *p, const struct drm_private_state *state) { diff --cc drivers/gpu/drm/vc4/vc4_kms.c index e94e2d344e0fb,245485e744a50..0507f24adcdd0 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@@ -85,22 -85,7 +85,22 @@@ static void vc4_ctm_destroy_state(struc kfree(ctm_state); } +static struct drm_private_state * +vc4_ctm_create_state(struct drm_private_obj *obj) +{ + struct vc4_ctm_state *ctm_state; + - ctm_state = kzalloc(sizeof(*ctm_state), GFP_KERNEL); ++ ctm_state = kzalloc_obj(*ctm_state); + if (!ctm_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &ctm_state->base); + + return &ctm_state->base; +} + static const struct drm_private_state_funcs vc4_ctm_state_funcs = { + .atomic_create_state = vc4_ctm_create_state, .atomic_duplicate_state = vc4_ctm_duplicate_state, .atomic_destroy_state = vc4_ctm_destroy_state, }; @@@ -727,22 -718,7 +727,22 @@@ static void vc4_load_tracker_destroy_st kfree(load_state); } +static struct drm_private_state * +vc4_load_tracker_create_state(struct drm_private_obj *obj) +{ + struct vc4_load_tracker_state *load_state; + - load_state = kzalloc(sizeof(*load_state), GFP_KERNEL); ++ load_state = kzalloc_obj(*load_state); + if (!load_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &load_state->base); + + return &load_state->base; +} + static const struct drm_private_state_funcs vc4_load_tracker_state_funcs = { + .atomic_create_state = vc4_load_tracker_create_state, .atomic_duplicate_state = vc4_load_tracker_duplicate_state, .atomic_destroy_state = vc4_load_tracker_destroy_state, }; @@@ -818,22 -800,7 +818,22 @@@ static void vc4_hvs_channels_print_stat } } +static struct drm_private_state * +vc4_hvs_channels_create_state(struct drm_private_obj *obj) +{ + struct vc4_hvs_state *hvs_state; + - hvs_state = kzalloc(sizeof(*hvs_state), GFP_KERNEL); ++ hvs_state = kzalloc_obj(*hvs_state); + if (!hvs_state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_private_obj_create_state(obj, &hvs_state->base); + + return &hvs_state->base; +} + static const struct drm_private_state_funcs vc4_hvs_state_funcs = { + .atomic_create_state = vc4_hvs_channels_create_state, .atomic_duplicate_state = vc4_hvs_channels_duplicate_state, .atomic_destroy_state = vc4_hvs_channels_destroy_state, .atomic_print_state = vc4_hvs_channels_print_state, diff --cc drivers/gpu/drm/virtio/virtgpu_prime.c index 693575e24db09,8adcf5c15d456..70b3b836e1c99 --- a/drivers/gpu/drm/virtio/virtgpu_prime.c +++ b/drivers/gpu/drm/virtio/virtgpu_prime.c @@@ -312,10 -310,10 +310,10 @@@ struct drm_gem_object *virtgpu_gem_prim } } - if (!vgdev->has_resource_blob || vgdev->has_virgl_3d) + if (!vgdev->has_resource_blob) return drm_gem_prime_import(dev, buf); - bo = kzalloc(sizeof(*bo), GFP_KERNEL); + bo = kzalloc_obj(*bo); if (!bo) return ERR_PTR(-ENOMEM);