drm i915 CPU PCH FIFO underrun and DP output stops (external monitor switches to standby)
System architecture: x86_64
Kernel version: 5.8.0-rc3-g7cafa8aeca72 (30-06-2020 from drm-tip branch)
Linux distribution: Arch
Machine or mother board model: Dell XPS 15 L502x, i7-2640M HD Graphics 3000
Display connector: DP
I use an external display connected via displayport, and my laptop's built-in display at the same time. When testing with the latest drm-tip kernel, the (then) current Arch kernel 5.7.6 and also a self compiled 4.19.131 lts, the following occurs: Either one of the following happens, seemingly at random although it may happen more often when playing video:
- The external monitor loses it's signal and turns to standby.
- Sometimes it turns back on if I move the mouse to the built-in display and back
- Other times it will only turn back on if I turn off both displays using
xset dpms force off
(and then move the mouse to turn them on again)
- The external monitor temporarily (1 second or so) loses it's signal.
edit: after some further testing I can confirm both points above still occur with the drm-tip kernel used
Without drm debugging kernel options dmesg shows this:
These three lines seem to be logged only once per session, even though the output drops temporarily more than once:
[ 1043.026948] i915 0000:00:02.0: [drm] ERROR CPU pipe B FIFO underrun
[ 1043.026972] i915 0000:00:02.0: [drm] ERROR uncleared pch fifo underrun on pch transcoder B
[ 1043.026973] i915 0000:00:02.0: [drm] ERROR PCH transcoder B FIFO underrun
When the monitor turns to standby, PCH errors occur more than once and they are logged at each occurrence.
Note that the monitor turned off twice when the following was generated
[14318.961158] i915 0000:00:02.0: [drm] ERROR CPU pipe B FIFO underrun
[14318.961174] i915 0000:00:02.0: [drm] ERROR uncleared pch fifo underrun on pch transcoder B
[14318.961176] i915 0000:00:02.0: [drm] ERROR PCH transcoder B FIFO underrun
[14505.481108] i915 0000:00:02.0: [drm] ERROR uncleared pch fifo underrun on pch transcoder B
[14505.481114] i915 0000:00:02.0: [drm] ERROR PCH transcoder B FIFO underrun
[14565.799411] perf: interrupt took too long (5011 > 5002), lowering kernel.perf_event_max_sample_rate to 39900
[14994.355400] i915 0000:00:02.0: [drm] ERROR CPU pipe B FIFO underrun
[14994.355414] i915 0000:00:02.0: [drm] ERROR uncleared pch fifo underrun on pch transcoder B
[14994.355415] i915 0000:00:02.0: [drm] ERROR PCH transcoder B FIFO underrun
[15016.918603] i915 0000:00:02.0: [drm] ERROR uncleared pch fifo underrun on pch transcoder B
[15016.918609] i915 0000:00:02.0: [drm] ERROR PCH transcoder B FIFO underrun
[15018.953528] i915 0000:00:02.0: [drm] ERROR uncleared pch fifo underrun on pch transcoder B
[15018.953538] i915 0000:00:02.0: [drm] ERROR PCH transcoder B FIFO underrun\
However I still can't guarantee that this is exactly correct. It occurs randomly and I don't know how to initiate or replicate it on command.
With kernel debugging (drm.debug=0x1e log_buf_len=1M
) those messages don't show, but a lot of other stuff does and I can't work out what is related to the problem, but I have attached the dmesg file. All I can say is the problem occurred multiple times in that log and definitely once near the end, but it doesn't include the boot stuff as I didn't realise dmesg would truncate, I thought log_buf_len=1M would take care of that.