I have a ThinkPad T14 gen1 (AMD) that I am using with a ThinkPad Ultra Docking Station (40AJ). I installed a fresh copy of Fedora 35 Workstation Edition and had no issues at all. However, after running dnf update for the first time after installation, I started having issues with the built-in laptop display going black after and only after the laptop is disconnected from the dock for the first time when logged in to a Gnome session under Wayland or at the gdm login screen. In particular, the built-in screen goes black in the following situations.
Immediately after I disconnect from the dock
After I connecting and/or disconnecting an external monitor via the built-in HDMI port (without using the dock).
After waking the computer from a suspended state
After the screen is turned of due to inactivity (resumed interaction with the computer does not trigger the display to turn back on)
None of the above issues occur if the dock is not connected to the docking station in the first place. They also do not occur after using another generic USB-C dock.
I have found the following workarounds to the problem.
Simply reconnecting to the dock usually restores function of the built-in and external displays
Pressing Ctrl-Alt-F3 (the terminal interface appears on the screen) and then Ctrl-Alt-F2 to drop me back into Gnome.
Logging out of Gnome and logging back in.
Using Xorg session instead of Wayland (Xorg also has problems with the dock, but they seem to have different symptoms)
The first two workarounds above are not a “persistent” fix since the screen will go black again in any of the scenarios above.
Immediately after the dock is connected, I get some errors from dmesg:
$> dmesg -x
...
kern :err : [ 60.112073] amdgpu 0000:07:00.0: [drm] *ERROR* mstb 00000000d5612617 port 1: DPCD read on addr 0x4b0 for 1 bytes NAKed
kern :err : [ 60.211327] amdgpu 0000:07:00.0: [drm] *ERROR* mstb 00000000d5612617 port 2: DPCD read on addr 0x4b0 for 1 bytes NAKed
kern :err : [ 60.278804] amdgpu 0000:07:00.0: [drm] *ERROR* mstb 00000000d5612617 port 3: DPCD read on addr 0x4b0 for 1 bytes NAKed
kern :err : [ 66.060339] amdgpu 0000:07:00.0: [drm] *ERROR* mstb 00000000d5612617 port 1: DPCD read on addr 0x4b0 for 1 bytes NAKed
kern :err : [ 66.095365] amdgpu 0000:07:00.0: [drm] *ERROR* mstb 00000000d5612617 port 2: DPCD read on addr 0x4b0 for 1 bytes NAKed
kern :err : [ 66.129529] amdgpu 0000:07:00.0: [drm] *ERROR* mstb 00000000d5612617 port 3: DPCD read on addr 0x4b0 for 1 bytes NAKed
...
These errors appear when I use the kernel version from the install media (5.14.10-300.fc35.x86_64) or the version after running dnf update (5.14.16-301.fc35.x86_64).
Interestingly, these errors do not occur if running Fedora from the installation media; I can connect and disconnect from the dock without issues.
Can anyone help me further identify the issue? I am not sure how to troubleshoot further and identify where I should report this issue if it hasn’t already been reported. Thanks!
Just in case someone don’t know how to downgrade and temporarily fix it
check your current version of mutter rpm -qa | grep mutter
→ If its > 41.0 you are most likely affected
downgrade mutter to last known working version sudo dnf install mutter-41.0-4.fc35
verify installed version rpm -qa | grep mutter
→ mutter-41.0-4.fc35.x86_64
Note: I performed a restart just to be sure that the right version is loaded, but not sure if this is needed. Since then this fix worked perfectly fine for my laptop and docking station
I am having the same issue with Fedora 36 on my Dell XPS 15 9560. I have dual monitors which are connected using Display Port to a docking station. When loading from suspend one of the monitors never woke up.
After some research I figured out that mst in mstb actually refers to the Display Port Multi Stream protocal which is required to address multiple monitors over a single DP link. That explains why one montior was still working and the other would not.
There is this kernel list discussion that @nchisholm has already mentioned. Somebody pointed out that fwupd was trying to probe the MST hub after waking up, causing it to fail. Effectively breaking MST support in the DP protocol. After disabling fwupd the problems disappeared for me:
$ systemctl stop fwupd
$ systemctl mask fwupd # Do not auto-start the daemon on next boot.
Now all my monitors reliably wake up again after suspend. Hurray!
This, of course, comes at the cost of not having automatic Firmeware updates. However, I am willing to accept this as I can manually start the daemon to let it search for new updates whenever I want.