drm_atomic_...ommit_planes(9)
β¨ drm_atomic_helper_commit_planes β commit plane state β¨
okay bestie, so you're in the Kernel API Manual and the page is drm_atomic_...ommit_planes(9) β yes the title got truncated in the header, it's giving "my name is too long for this terminal" energy π
. Buckle up, this one's about pushing plane state for real.
πΈ SYNOPSIS πΈ
void drm_atomic_helper_commit_planes (struct drm_device *dev , struct
drm_atomic_commit *state , uint32_t flags );
π ARGUMENTS π
devβ the DRM device, your main character β¨stateβ the atomic state object that's being committed rnflagsβ the flags that control how plane state gets committed
π DESCRIPTION π
So what this function actually does: it commits the new plane state, using the plane and atomic helper functions for planes and CRTCs. And here's the vibe check β it assumes the atomic state has already been pushed into the relevant object state pointers, because at this point this step can no longer fail. No takesies backsies π«Ά.
It does still need the global state object state though, to figure out which planes and crtcs actually need updating. iykyk.
Heads up bestie: this function does all plane updates across all CRTCs in one single step. If your hardware can't support that approach, go look at drm_atomic_helper_commit_planes_on_crtc instead π.
Plane parameters can be updated by applications while the associated CRTC is disabled. The DRM/KMS core stores those parameters in the plane state, and they'll be available to the driver when the CRTC gets turned on. So as a result, most drivers don't need to be immediately notified of plane updates for a disabled CRTC β lowkey convenient tbh π.
Unless you otherwise need it, drivers are advised to set the ACTIVE_ONLY flag in flags, so they don't receive plane update notifications related to a disabled CRTC. Why? Because this avoids having to manually ignore plane updates in driver code when the driver and/or hardware can't β or just plain don't need to β deal with updates on disabled CRTCs. Example: when supporting runtime PM. Saves you so much pain, fr fr π.
Drivers may set the NO_DISABLE_AFTER_MODESET flag in flags if the relevant display controllers require a CRTC's planes to be disabled when the CRTC is disabled. This function would then skip the drm_plane_helper_funcs.atomic_disable call for a plane if the CRTC of the old plane state needs a modesetting operation. And of course β of course β the drivers need to disable the planes in their CRTC disable callbacks, because no one else would do that π. That's on you, babe.
β One more: thedrm_atomic_helper_commitdefault implementation does not set theACTIVE_ONLYflag, so it most closely matches the behaviour of the legacy helpers. Do not copy that blindly by drivers. Not everything is a slay worth imitating, ok? π
π¦ SEE ALSO π¦
The whole friend group π β start with the overview of the kernel file ./drivers/gpu/drm/drm_atomic_helper.c:
overview(9)drm_atomic_helper_check_modeset(9)drm_atomic_helper_check_wb_connector_state(9)drm_atomic_helper_check_plane_state(9)drm_atomic_helper_check_crtc_primary_plane(9)drm_atomic_helper_check_planes(9)drm_atomic_helper_check(9)drm_atomic_helper_commit_encoder_bridge_disable(9)drm_atomic_helper_commit_crtc_disable(9)drm_atomic_helper_commit_encoder_bridge_post_disable(9)drm_atomic_helper_update_legacy_modeset_state(9)drm_atomic_helper_calc_timestamping_constants(9)drm_atomic_helper_commit_crtc_set_mode(9)drm_atomic_helper_commit_modeset_disables(9)drm_atomic_helper_commit_writebacks(9)drm_atomic_helper_commit_encoder_bridge_pre_enable(9)drm_atomic_helper_commit_crtc_enable(9)drm_atomic_helper_commit_encoder_bridge_enable(9)drm_atomic_helper_commit_modeset_enables(9)drm_atomic_helper_wait_for_fences(9)drm_atomic_helper_wait_for_vblanks(9)drm_atomic_helper_wait_for_flip_done(9)drm_atomic_helper_commit_tail(9)drm_atomic_helper_commit_tail_rpm(9)drm_atomic_helper_async_check(9)drm_atomic_helper_async_commit(9)drm_atomic_helper_commit(9)implementing nonblocking commit(9)drm_atomic_helper_setup_commit(9)drm_atomic_helper_wait_for_dependencies(9)drm_atomic_helper_fake_vblank(9)drm_atomic_helper_commit_hw_done(9)drm_atomic_helper_commit_cleanup_done(9)drm_atomic_helper_prepare_planes(9)drm_atomic_helper_unprepare_planes(9)drm_atomic_helper_commit_planes_on_crtc(9)drm_atomic_helper_disable_planes_on_crtc(9)drm_atomic_helper_cleanup_planes(9)drm_atomic_helper_swap_state(9)drm_atomic_helper_update_plane(9)drm_atomic_helper_disable_plane(9)drm_atomic_helper_set_config(9)drm_atomic_helper_disable_all(9)drm_atomic_helper_reset_crtc(9)drm_atomic_helper_shutdown(9)drm_atomic_helper_duplicate_state(9)drm_atomic_helper_suspend(9)drm_atomic_helper_commit_duplicated_state(9)drm_atomic_helper_resume(9)drm_atomic_helper_page_flip(9)drm_atomic_helper_page_flip_target(9)drm_atomic_helper_bridge_propagate_bus_fmt(9)drm_atomic_helper_bridge_get_hdmi_output_bus_fmts(9)
okay that's the whole page, mwah π this one comes from ./drivers/gpu/drm, dated October 2026, and the page answers to drm_atomic_...ommit_planes(9) (yes, still truncated, she refuses to be perceived in full β¨). go commit some planes bestie, you've got this ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms