Screen flickering on Linux kernel 6.12

Same for me actually. I initially thought sg_display was enough, but then the flickers occured albeit very rarely. debugmask basically enables/disables some of the display core functionality.

Setting debugmask = 0x410 is equivalent to enabling two separate flags (can be found here): 0x410 = 0x10 | 0x400 = DC_DISABLE_PSR | DC_DISABLE_REPLAY (| is the bitwise or operator; it’s a pretty common technique for setting flags in a C code, where you define the options with enum-s with non-overlapping bits). The documentation describes what these options mean.

DC_DISABLE_PSR
If set, disable Panel self refresh v1 and PSR-SU

DC_DISABLE_REPLAY
If set, disable Panel Replay

PSR or panel self-refresh is a functionality that allows for the refresh rate of the display to be adjusted, depending on how fast things change on the display. This is basically designed to reduce the power consumption. PSR2 (or PSR-SU, SU = selectively update) is analogous, but allows for only portions of the screen to have adjusted update frequency. Here’s a description of that:

PSR2/PSR-SU allows for expanded power-savings over the original PSR power-savings tech. Rather than being limited to power-savings when there are no changes/damage to the screen contents, this refined tech allows for selectively updating changed regions of the screen.

If I understand correctly, Panel Replay is analogous to PSR, except it’s designed for external displays (over the display port 2.0+). So I’m assuming if you’re not using an external display, simply setting debugmask=0x10 should be enough, but I haven’t tested that.

So in short, these options are intended to reduce the power consumption when rendering static (or close to static) images on the screen. Disabling them will likely increase the power consumption and shorten the battery lifespan.

1 Like