Re: [PATCH RFC] thunderbolt: Re-add DP resources on resume
From: 李佳怡
Date: Fri Sep 19 2025 - 04:00:53 EST
在 2025/9/19 15:30, Mika Westerberg 写道:
On Fri, Sep 19, 2025 at 03:24:20PM +0800, 李佳怡 wrote:
在 2025/9/19 00:43, Mika Westerberg 写道:
On Thu, Sep 18, 2025 at 06:20:59PM +0200, Mika Westerberg wrote:
Hi,
On Thu, Sep 18, 2025 at 04:34:31PM +0800, 李佳怡 wrote:
在 2025/9/17 20:50, Mika Westerberg 写道:
On Wed, Sep 17, 2025 at 06:12:31PM +0800, 李佳怡 wrote:
As requested, I've attached the complete dmesg output (from boot to after
resume) reproducing the issue.
Testing Methodology:
1. Start with the Targus Thunderbolt dock already connected to the system
2. Enter S3 suspend (sleep) with no DP monitor connected to the dock
3. Resume from S3
4. After the system has fully resumed, connect the DP monitor to the dock
Thanks! It is badly line wrapped. I wonder if you can just attach it?
Anyways I found some unexpected things there:
[ 8.647850] With USB4 patch v1.0.0
What is this? ;-)
Thanks for your help!
This is a self-compiled kernel based on version 5.4 with backported
Thunderbolt drivers. I will also attach the kernel log from a build using
the linux-6.6.y branch of the community linux-stable repository.
Okay but I really suggest using more recent kernel. 6.16 is current stable
so that would be good.
[ 8.647860] ACPI: bus type thunderbolt registered
[ 8.664660] [7] nhi_probe:1326: thunderbolt 0000:2c:00.0: total paths: 21
[ 8.665209] [7] tb_ring_alloc:586: thunderbolt 0000:2c:00.0: allocating
TX ring 0 of size 10
[ 8.665243] [7] tb_ring_alloc:586: thunderbolt 0000:2c:00.0: allocating
RX ring 0 of size 10
[ 8.665267] [7] tb_ctl_alloc:665: thunderbolt 0000:2c:00.0: control
channel created
[ 8.665272] [7] icm_probe:2549: thunderbolt 0000:2c:00.0: ICM not
supported on this controller
[ 8.665285] [7] tb_ring_free:840: thunderbolt 0000:2c:00.0: freeing RX
ring 0
[ 8.665294] [7] tb_ring_free:840: thunderbolt 0000:2c:00.0: freeing TX
ring 0
What is this?
Is this Intel TB/USB4 controller or something else? All USB4 compliant
controllers should go directly to tb.c as that's the part dealing with
software connection manager. The above looks like it tries first with the
firmware connection manager and that should not happen outside of Intel
Thunderbolt 3 hosts.
Yes, there is a mistake. I discovered that during the USB4_NATIVE_CONTROL
negotiation in the firmware, an OSC_CAPABILITIES_MASK_ERROR bit was being
set incorrectly, which should not have happened.
The log I will attach next has been modified to fix this issue.
[..]
[ 0.498976] [1] tb_switch_reset:1666: thunderbolt 0000:2c:00.0: 0: resetting
[ 0.533329] [1] tb_add_dp_resources:217: thunderbolt 0000:2c:00.0: 0:10: DP IN resource available
[ 0.533959] [1] tb_add_dp_resources:217: thunderbolt 0000:2c:00.0: 0:11: DP IN resource available
The DP IN resources were added here.
[..]
[ 19.035726] [171] tb_switch_set_wake:3445: thunderbolt 0000:2c:00.0: 0: enabling wakeup: 0x3f
[ 19.037401] [171] tb_ring_stop:768: thunderbolt 0000:2c:00.0: stopping RX ring 0
[ 19.037412] [171] ring_interrupt_active:141: thunderbolt 0000:2c:00.0: disabling interrupt at register 0x38200 bit 21 (0x200001 -> 0x1)
[ 19.037439] [171] tb_ring_stop:768: thunderbolt 0000:2c:00.0: stopping TX ring 0
[ 19.037449] [171] ring_interrupt_active:141: thunderbolt 0000:2c:00.0: disabling interrupt at register 0x38200 bit 0 (0x1 -> 0x0)
[ 19.037463] [171] tb_ctl_stop:733: thunderbolt 0000:2c:00.0: control channel stopped
Runtime suspend.
(and a couple more)
[ 266.399800] [3870] tb_ctl_start:703: thunderbolt 0000:2c:00.0: control channel starting...
[ 266.399808] [3870] tb_ring_start:693: thunderbolt 0000:2c:00.0: starting TX ring 0
[ 266.399821] [3870] ring_interrupt_active:141: thunderbolt 0000:2c:00.0: enabling interrupt at register 0x38200 bit 0 (0x0 -> 0x1)
[ 266.399826] [3870] tb_ring_start:693: thunderbolt 0000:2c:00.0: starting RX ring 0
[ 266.399837] [3870] ring_interrupt_active:141: thunderbolt 0000:2c:00.0: enabling interrupt at register 0x38200 bit 21 (0x1 -> 0x200001)
[ 266.399848] [3870] tb_switch_resume:3478: thunderbolt 0000:2c:00.0: 0: resuming switch
[ 266.399852] [3870] tb_switch_configure:2590: thunderbolt 0000:2c:00.0: restoring Switch at 0x0 (depth: 0, up port: 5)
[ 266.400032] [3870] tb_switch_set_wake:3447: thunderbolt 0000:2c:00.0: 0: disabling wakeup
Around this time you should see the hotplug events coming to the DP IN
adapters. But there is none.
There is a bit in the DP adapter config space (DHP) that can be used to
disable this but the spec says it defaults to 0. Anyways I suggest to check
that (and also the Plugged bit). You can dump these using tbtools [1]. Let
me know if you want help with that.
Nevermind about the Plugged bit, that's not applicable here.
Here's how to dump the DHP bit. This is from Intel host:
# tbdump -vv -r 0 -N 1 -a 5 ADP_CS_5
0x0005 0x00004809 0b00000000 00000000 01001000 00001001 ..H. ADP_CS_5
[00:06] 0x9 Max Input HopID
[11:17] 0x9 Max Output HopID
[22:28] 0x0 Link Credits Allocated
[29:29] 0x0 HEC Error Enable (HEE)
[30:30] 0x0 Flow Control Error Enable (FCEE)
[31:31] 0x0 Disable Hot Plug Events (DHP)
Thank you for your help. As you suggested, I tried kernel 6.16, but the
issue still persists.
The logs and device vendor information are included in the attachment. I
also ran the tbdump command, and the result shows the DHP bit is set to 0.
Does this indicate there might still be other issues?
# tbdump -vv -r 0 -N 1 -a 5 ADP_CS_5
Please run it against the DP IN adapters. That's 10 and 11. The 5 above was
just an example from Intel HW.
# tbdump -vv -r 0 -N 1 -a 10 ADP_CS_5
and
# tbdump -vv -r 0 -N 1 -a 11 ADP_CS_5
The lspci dump indicates this is ASMedia host controller. I did not even
know that they have such thing. I thought they only have device (which
should be working in Linux). The host side may require some additional
enablement.
Apologies, Please find the latest results.
# tbdump -vv -r 0 -N 1 -a 10 ADP_CS_5
0x0005 0x0000d809 0b00000000 00000000 11011000 00001001 .... ADP_CS_5
[00:06] 0x9 Max Input HopID
[11:17] 0x1b Max Output HopID
[22:28] 0x0 Link Credits Allocated
[29:29] 0x0 HEC Error Enable (HEE)
[30:30] 0x0 Flow Control Error Enable (FCEE)
[31:31] 0x0 Disable Hot Plug Events (DHP)
# tbdump -vv -r 0 -N 1 -a 11 ADP_CS_5
0x0005 0x0000d809 0b00000000 00000000 11011000 00001001 .... ADP_CS_5
[00:06] 0x9 Max Input HopID
[11:17] 0x1b Max Output HopID
[22:28] 0x0 Link Credits Allocated
[29:29] 0x0 HEC Error Enable (HEE)
[30:30] 0x0 Flow Control Error Enable (FCEE)
[31:31] 0x0 Disable Hot Plug Events (DHP)
Regarding the ASMedia host controller: if hotplug events for the DP IN adapter are not being generated, is it feasible to manually add the DP IN resource as I initially thought, or is that approach incorrect for this scenario?