Re: Apple Thunderbolt Display chaining

From: Mika Westerberg
Date: Mon Aug 08 2022 - 08:46:54 EST


On Mon, Aug 08, 2022 at 08:25:56PM +0800, Brad Campbell wrote:
> root@bkd:/sys/bus/pci/devices/0000:31:04.0# modprobe thunderbolt
> root@bkd:/sys/bus/pci/devices/0000:31:04.0# time cat config | hexdump
>
> <slowdown/lockup/reboot>
>
> This on the serial console :
> [ 160.248275] ACPI: bus type thunderbolt registered
> [ 160.253386] thunderbolt 0000:05:00.0: enabling device (0000 -> 0002)
> [ 160.872438] thunderbolt 0-3: new device found, vendor=0x1 device=0x8002
> [ 160.879398] thunderbolt 0-3: Apple, Inc. Thunderbolt Display
> [ 161.436984] thunderbolt 0-303: new device found, vendor=0x1 device=0x8002
> [ 161.444108] thunderbolt 0-303: Apple, Inc. Thunderbolt Display
> [ 165.324982] hrtimer: interrupt took 604007930 ns
> [ 169.744439] xhci_hcd 0000:28:00.0: Unable to change power state from D3hot to D0, device inaccessible
> [ 223.912783] rcu: INFO: rcu_preempt self-detected stall on CPU
> [ 229.741463] rcu: 9-....: (126 ticks this GP) idle=0d44/1/0x4000000000000000 softirq=1935/1935 fqs=76
> [ 237.593512] (t=7349 jiffies g=1537 q=264 ncpus=12)
> [ 242.425503] NMI backtrace for cpu 9
> [ 244.640203] CPU: 9 PID: 57 Comm: ksoftirqd/9 Tainted: G O 5.19.0+ #57
> [ 251.082940] Hardware name: Gigabyte Technology Co., Ltd. B550 VISION D-P/B550 VISION D-P, BIOS F15d 07/20/2022
> [ 258.532330] Call Trace:
> [ 260.545693] <IRQ>
> [ 262.156386] dump_stack_lvl+0x34/0x44
> [ 264.985085] nmi_cpu_backtrace.cold+0x30/0x70
> [ 268.800445] ? lapic_can_unplug_cpu+0x90/0x90
> [ 273.028459] nmi_trig

Yeah, the link (PCIe tunnel) seems not to be functional and that causes
the hang. In addition to what I asked in my previous email, let's block
runtime PM from xHCI too in drivers/usb/host/xhci-pci.c::xhci_pci_quirks():

Comment out this block:

if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
(pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_TITAN_RIDGE_4C_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ICE_LAKE_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_RAPTOR_LAKE_XHCI ||
pdev->device == PCI_DEVICE_ID_INTEL_METEOR_LAKE_XHCI))
xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW;