Comment 0 for bug 1922334

Revision history for this message
Georgi Boiko (pandasauce) wrote :

I've recently upgraded my workhorse from XPS 9560 (2016) to a newer generation XPS 9500 (2020) and ran into several things that feel like regressions, but are probably related to hardware changes. This is one of them.

tl;dr:
When using XPS 9500 with a TB16 dock and an external monitor (Benq EX2780Q) connected to the dock via USB-C to USB-C (DP alternate mode), most of the time the monitor fails to wake up after going blank.

details:
Simplest way to reproduce is for hit Super+L, wait for the monitor to properly go in standby, then type something in or move the mouse to wake it up. 8 times out of 10 it does not wake up when using XPS 9500. Most of the time this can be fixed by power cycling the monitor, however this has a seemingly random chance of triggering two other issues:

1. The system to lose sight of the monitor for a brief period of time, which sometimes causes it to hang with a black screen and needs some combination of restarting the monitor, the dock, and the laptop, because there is a separate USB issue making hot-plugging unusable.
2. The monitor itself gets stuck in a weird standby state where it stops reacting to button presses and I need to hold the power button a bit longer for it to sort of hard reset?

Notably, it wakes up fine every time when using XPS 9560 or Precision 5520 in the same setup which I have been using for ages.

This becomes particularly troublesome when screens go into short-lived standby during boot: after the Dell logo, after entering the LUKS password, after logging in. Each of these points has a chance of triggering the bug, because it looks like there is some sort of mode change and waking signal submission happening between them that triggers it. I had to disable screen timeout as a temporary workaround to be able to work on this system at all without having to play "monitor wake lottery" every time I go brew a cuppa. The workaround at boot time is to either re-roll the lottery, or boot with the dock connected and lid open, then close the lid and keep working from there.

The dock, the monitor, all USB peripherals are the same in both cases - it's literally just the TB16 cable plugged into a different laptop.

I have attempted 5.8 Ubuntu generic, 5.6 OEM (-20.04) and 5.10 OEM (-20.04b and -20.04-edge) kernels on the 9500 with same results. I have attempted disabling USB autosuspend via a GRUB kernel parameter to usbcore. I have attempted both NVidia and Intel GPUs. I have attempted playing with BIOS settings: wake on dell usb-c docks, disable early sign of life for both checkboxes, disabling SGX and SMM, checking all 3 boxes for Thunderbolt and switching off Thunderbolt security. None of these make a noticeable difference.

Since it was fine with 9560, 5520 and a friend with a 9570 has no issues either, my gut feeling is that this is due to the upgrade from Alpine Ridge to a Titan Ridge Thunderbolt controller that happened in this generation - something wrong with the driver, or the firmware may have missed some of the "lessons learned" in Alpine Ridge and caused this regression. That would also make it applicable to 9300, which has a "developer edition" option under Project Sputnik and several reports of the same problem scattered across the internet:

https://www.dell.com/community/XPS/XPS-13-9300-with-WD19TB-External-display-not-coming-on-after/td-p/7676922
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1889342 (may be a duplicate, but for WD19TB dock on 9300, so may be slightly different too)
https://www.reddit.com/r/linuxquestions/comments/ka0w2j/monitor_doesnt_wake_from_sleep/

etc etc. Those reports suggest high bandwidth usage sometimes affects it, so it's worth noting that my external monitor is a 1440p 144Hz one that uses tons of bandwidth indeed.

The only hint in terms of logs seems to be this message in dmesg that I see when power cycling the monitor and getting back into the system:

[ 250.777684] pcieport 0000:09:04.0: pciehp: Slot(0-1): Card not present
[ 250.777695] xhci_hcd 0000:0b:00.0: can't change power state from D3cold to D0 (config space inaccessible)
[ 250.778293] xhci_hcd 0000:0b:00.0: can't change power state from D3hot to D0 (config space inaccessible)
[ 250.778336] xhci_hcd 0000:0b:00.0: Controller not ready at resume -19
[ 250.778340] xhci_hcd 0000:0b:00.0: PCI post-resume error -19!
[ 250.778343] xhci_hcd 0000:0b:00.0: HC died; cleaning up
[ 250.778374] xhci_hcd 0000:0b:00.0: remove, state 4
[ 250.778380] usb usb6: USB disconnect, device number 1
[ 250.778895] xhci_hcd 0000:0b:00.0: USB bus 6 deregistered
[ 250.778905] xhci_hcd 0000:0b:00.0: remove, state 4
[ 250.778910] usb usb5: USB disconnect, device number 1
[ 250.779396] xhci_hcd 0000:0b:00.0: Host halt failed, -19
[ 250.779400] xhci_hcd 0000:0b:00.0: Host not accessible, reset failed.
[ 250.779484] xhci_hcd 0000:0b:00.0: USB bus 5 deregistered

And there was one time when the i915 driver crashed in the process of power cycling the external monitor, which I could not reproduce. Just in case, I attached the kernel logs for it too.

System config:

XPS 9500, i7, 32GB RAM
BIOS 1.6.1, TB3 firmware NVM60
Ubuntu 20.04.02 LTS, kernels 5.6-oem, 5.8-generic, 5.10-oem (same behaviour)
TB16 dock firmware 1.0.4 (MST 3.12.02)