I was about to discard this laptop to recycling when I decided to debug further. After many hours of testing and countless reboots, I found that this problem requires two specific kernel parameters working together.
Minimal working solution
Important context: This solution works for my setup because I use an external monitor permanently. The internal display is disabled at kernel level. If you need to use your laptop's internal screen, you'll need to adapt this solution (see "Adapting for your setup" section below).
sudo nano /etc/default/grub
Add these two parameters to GRUB_CMDLINE_LINUX_DEFAULT:
GRUB_CMDLINE_LINUX_DEFAULT="pcie_aspm=off video=eDP-1:d"
sudo update-grub reboot
Root cause diagnosis
Xorg logs showed this repeating error:
(WW) modeset(0): hotplug event: connector 106's link-state is BAD, tried resetting the current mode. You may be left with a black screen if this fails...
Additionally, glxinfo confirmed no hardware acceleration:
$ glxinfo | grep "OpenGL renderer" OpenGL renderer string: llvmpipe (software rendering)
This indicated two related problems:
- PCIe ASPM conflicts with Intel UHD Graphics 620 on Comet Lake architecture
- Malfunctioning internal display causing system-wide instability
Testing process (what did NOT work)
Attempt 1: Driver updates only
sudo apt update && sudo apt upgrade
Result: No change. Problem persisted.
Attempt 2: nomodeset parameter
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
Result: System boots but no hardware acceleration. External monitor doesn't work properly.
Attempt 3: Disabling internal display with xrandr
xrandr --output eDP-1 --off
Result: Failed. Flickering occurs during kernel boot, before X starts. xrandr acts too late in the process.
Attempt 4: Various i915 parameters
Tested multiple i915 driver parameter combinations:
i915.modeset=1 i915.enable_fbc=0 i915.enable_psr=0
Result: Marginal improvements but fundamental problem persists.
Working solution
Step 1: Disable PCIe ASPM (CRITICAL)
pcie_aspm=off
What it does: Disables PCIe Active State Power Management, which has documented issues with Intel UHD 620 on Comet Lake architecture.
Result when applying only this parameter:
- "link-state BAD" errors disappear from logs
- External monitor works
- System more responsive
- Internal screen still flickers constantly
- System still unstable due to flickering interference
Step 2: Disable internal display at kernel level (NECESSARY)
video=eDP-1:d
What it does: The :d flag (disabled) turns off the internal display during kernel initialization, before it can cause problems.
Why it's necessary in addition to Step 1: While pcie_aspm=off stabilizes PCIe communication, the malfunctioning internal display continues sending erratic signals that interfere with the entire graphics subsystem.
Important: eDP-1 is the identifier for my internal display. Your system might use a different identifier (see "Finding your display identifier" below).
Result when applying both parameters:
- No errors in logs
- Stable external monitor
- Hardware acceleration working
- System completely usable
Finding your display identifier
Before applying the video= parameter, you need to identify your displays. This took me hours to figure out.
Method 1: Check currently connected displays
$ xrandr Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384 eDP-1 connected primary 1366x768+0+0 (flickering/problematic display) HDMI-2 connected 1920x1080+1366+0 (external monitor)
The internal display is typically named:
eDP-1 (most common for embedded DisplayPort) LVDS-1 (older laptops) DSI-1 (some newer systems)
Method 2: Check kernel detected displays
$ ls /sys/class/drm/ card0 card0-DP-1 card0-DP-2 card0-eDP-1 card0-HDMI-A-1 card0-HDMI-A-2
Look for entries with eDP, LVDS, or DSI - these are typically internal displays.
Method 3: Check display status
$ cat /sys/class/drm/card0-eDP-1/status connected $ cat /sys/class/drm/card0-HDMI-A-2/status connected
Adapting for your setup
Once you identify your displays:
If using external monitor only (like me):
video=eDP-1:d # Disable internal display video=HDMI-2:1920x1080@60 # Force stable resolution on external
If you want to keep internal display working: You'll need to find alternative solutions. The pcie_aspm=off parameter alone might help, or you may need different i915 parameters. In my case, the internal display was so problematic that disabling it was the only stable solution.
If you have multiple external monitors:
video=eDP-1:d # Disable internal video=HDMI-1:1920x1080@60 # External monitor 1 video=DP-1:2560x1440@75 # External monitor 2
Final configuration
sudo nano /etc/default/grub
Modify the line like this:
GRUB_CMDLINE_LINUX_DEFAULT="quiet pcie_aspm=off video=eDP-1:d"
Apply changes:
sudo update-grub reboot
Post-fix verification
1. Confirm parameters are active
$ cat /proc/cmdline ... pcie_aspm=off video=eDP-1:d ...
2. Verify hardware acceleration
$ glxinfo | grep "OpenGL renderer" OpenGL renderer string: Mesa Intel(R) UHD Graphics (CML GT2)
3. Confirm no errors in logs
$ sudo journalctl -b | grep "link-state" # (no output = problem solved)
4. Verify eDP-1 doesn't appear
$ xrandr Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384 HDMI-2 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 296mm # eDP-1 should NOT appear in the list
Important notes
Both parameters are necessary because they address different but related issues. pcie_aspm=off fixes the PCIe communication layer, while video=eDP-1:d removes the source of interference. Neither alone provides a stable system.
This solution requires permanent use of an external monitor since the internal display is disabled.
Trade-offs to consider:
- Disabling ASPM will increase power consumption (I use the laptop plugged in, so haven't tested battery impact)
- This solution requires permanent use of external monitor
- Some people report increased heat with ASPM disabled, though I haven't experienced this
This solution applies to:
- Systems with "link-state BAD" errors in Xorg logs
- Intel UHD Graphics 620 on Comet Lake architecture
- Flickering internal display causing system-wide instability
- Situations where external monitor can be used permanently
Despite looking like sudden hardware failure, this turned out to be a configuration/compatibility issue. The laptop worked fine for 5+ years until recent kernel/firmware changes triggered the incompatibility with PCIe ASPM management.
Tested configuration
- Laptop: Slimbook Pro 2019
- CPU: Intel i7 Comet Lake-U
- GPU: Intel UHD Graphics 620 (integrated)
- OS: Debian GNU/Linux
- Kernel: 6.x series (problem appeared with recent kernels)
System has been stable for several weeks after applying this fix, with hardware acceleration working and no display errors.
Additional parameters tested (optional reference)
During my debugging process, I also tested these i915-specific parameters. While not necessary for basic functionality, some users with similar Comet Lake hardware might benefit from them:
i915.enable_psr=0 # Disable Panel Self Refresh (can help with residual flickering) i915.enable_dc=0 # Disable Display C-states (stability on some Comet Lake systems) i915.enable_rc6=0 # Disable render C-states (if power management conflicts persist) i915.enable_fbc=0 # Disable Frame Buffer Compression (minor stability improvement) i915.modeset=1 # Ensure kernel mode setting is active
These parameters provided minor improvements during testing but were not required to solve the core issue. The minimal solution (pcie_aspm=off video=eDP-1:d) was sufficient for a stable system.