PANEL SELF REFRESH (PSR SRD)(9)
β¨ Panel Self Refresh (PSR/SRD) β¨
okay bestie, so this one's a Kernel API Manual page, section 9, and it's literally all about letting your display chill out and nap while still showing you stuff π€β¨
πΈ DESCRIPTION πΈ
So since Haswell, the Display controller supports Panel Self-Refresh on display panels that have a remote frame buffer (RFB) implemented according to the PSR spec in eDP1.3. The way PSR works is it lets the display slide into lower standby states when the system is idle but the display is still on β because it completely eliminates the display refresh request to DDR memory, as long as the frame buffer for that display hasn't changed. no cap, that's the whole vibe π
Panel Self Refresh must be supported by both the Hardware (source) and the Panel (sink). both sides gotta be in on it, fr fr π«Ά
PSR saves power by caching the framebuffer in the panel RFB, which is what lets us power down the link and the memory controller. For DSI panels the exact same idea is called "manual mode" β same energy, different name, iykyk.
So the implementation uses the hardware-based PSR support, which automatically enters/exits self-refresh mode. The hardware takes care of sending the required DP aux message and could even retrain the link (that part isn't enabled yet though π). The hardware also keeps track of any frontbuffer changes so it knows when to exit self-refresh mode again. Unfortunately that part doesn't work too well π which is exactly why the i915 PSR support uses the software frontbuffer tracking instead, to make sure it doesn't miss a screen update.
For this integration, intel_psr_invalidate and intel_psr_flush get called by the frontbuffer tracking code. And heads up: because of locking issues, the self-refresh re-enable code is done from a work queue β which must be correctly synchronized/cancelled when shutting down the pipe. βΌοΈ like, don't skip that part, it's giving important.
π SEE ALSO π
- Kernel file
./drivers/gpu/drm/i915/display/intel_psr.c intel_psr_disable(9)intel_psr_pause(9)intel_psr_resume(9)intel_psr_needs_vblank_notification(9)intel_psr_trigger_frame_change_event(9)intel_psr_min_set_context_latency(9)intel_psr_wait_for_idle_locked(9)intel_psr_invalidate(9)intel_psr_flush(9)intel_psr_init(9)intel_psr_link_ok(9)intel_psr_lock(9)intel_psr_unlock(9)intel_psr_notify_dc5_dc6(9)intel_psr_dc5_dc6_wa_init(9)intel_psr_notify_pipe_change(9)intel_psr_notify_vblank_enable_disable(9)
and that's the whole page bestie, you ate π this came to you from ./drivers/gpu/drm/i915/display, dated October 2026 β go forth and let your panel rest, she's earned it ππ¦π
π¦ 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