DMC WAKELOCK SUPPORT(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 DMC wakelock support 🌸

okay so bestie, welcome to section 9 of the Kernel API Manual, this is the whole glow-up on DMC wakelocks and honestly it's giving "the display engine finally got boundaries" energy πŸ’…


✨ DESCRIPTION ✨

so. a wake lock is the mechanism that makes the display engine exit DC states, so you're actually allowed to program registers that are powered down in those states. that's the whole vibe: no wakelock, no register access, no service πŸ’€

back in the day (previous projects, iykyk), the display engine just exited DC states automatically whenever it detected programming. cute, but lowkey chaotic. now? software is the main character β€” it controls the exit by programming the wake lock itself. the way this improves system performance and system interactions?? obsessed. it also fits the flip queue style of programming so much better. πŸ¦‹

okay but important: wake lock is only required when DC5, DC6, or DC6v have been enabled in DC_STATE_EN, and the wake lock mode of operation has been enabled. both. don't skip the vibe check.

the wakelock mechanism in DMC lets the display engine exit DC states explicitly, before programming registers that may be powered down. with earlier hardware this just happened automatically and implicitly the moment the display engine accessed a register β€” no cap, that's literally how it worked. but with the wakelock implementation, the driver asserts a wakelock in DMC, which forces it to exit the DC state until the wakelock is deasserted. hold it, then release it. periodt. πŸŽ€

you can enable and disable the whole mechanism by writing to the DMC_WAKELOCK_CFG register. and there are also 13 control registers that can be used to hold and release different wakelocks. in the current implementation we only need one wakelock, so only DMC_WAKELOCK1_CTL is used. the other definitions are literally just sitting there for potential future use. saving them for later, as one does. πŸ’–

🫢 the compatibility tea

this is available starting with Xe2_LPD (display version 20) as an experimental feature, and on Xe3_LPD (display version 30) as the first display release with official support.

that means we only enable the feature by default on the latter 😌 and using it on the former requires explicitly using the enable_dmc_wl module parameter β€” you gotta ask for it, bestie, it will not come to you.


🌈 SEE ALSO 🌈

  • Kernel file ./drivers/gpu/drm/i915/display/intel_dmc_wl.c

alright bestie that's the whole page, go forth and assert those wakelocks responsibly ✨ this was brought to you by ./drivers/gpu/drm/i915/display, dated October 2026, from the DMC wakelock support(9) era β€” slay, stay powered, and remember to deassert πŸ§šβ€β™€οΈπŸ’œ

πŸ“¦ where this page comes from