Recently I treated myself to a Dell XPS 13 9340. The Thinkpad X220 I’d been rocking since university is a really nice machine, but it’s low specs really started to interfere with my daily tasks…
The Dell had been running great. It runs the latest Fedora Silverblue without any driver issues. Then, one day, the screen suddenly started to glitch immediately after boot. Essentially, whenever an area of the screen was updated, there was a chance that it just gave up and drew a colorful horizontal line instead. This behaviour looked liked a failed monitor at first. It also appeared directly after boot in the graphical LUKS passphrase prompt.
But suspiciously, the behaviour didn’t appear in the system setup outside of Linux. So I was either facing a failed GPU (which would suck) or a faulty driver (which would’ve sucked a lot less).
A lot of searching brought up a third option however. Like all modern chipsets, the laptop supports Panel Self Refresh (PSR). PSR helps to save power, because it allows the display driver to simply not update the display if nothing on the display has changed. While cool, it can cause issues with Screen Flickering.
So I tried disabling that to see if anything changes. On Fedora Silverblue
kernel parameters are modified via rpm-ostree kargs
. So, to disable PSR:
rpm-ostree kargs --append=i915.enable_psr=0
This appends i915.enable_psr=0
to the kernel parameters, which in turn
disables PSR in the Intel Video driver (i915).
And… it worked! The display was no longer going haywire.
Then I wanted to take a picture of this bug for this blogpost. So:
rpm-ostree kargs --delete=i915.enable_psr=0
And… Nothing. PSR was enabled again and… No flickering.
I’ve chosen to accept this for now. If the flickering returns, I have this post to copy-and-paste the kernel parameter from :)