Framework 16 doesn't query Thunderbolt cable capabilities and falls back to 20Gbps
Opened this issue · 7 comments
Device Information
System Model or SKU
Please select one of the following
- Framework Laptop 13 (11th Gen Intel® Core™)
- Framework Laptop 13 (12th Gen Intel® Core™)
- Framework Laptop 13 (13th Gen Intel® Core™)
- Framework Laptop 13 (AMD Ryzen™ 7040 Series)
- Framework Laptop 13 (Intel® Core™ Ultra Series 1)
- Framework Laptop 16 (AMD Ryzen™ 7040 Series)
BIOS VERSION
03.05
DIY Edition information
Memory: Kingston KF556S40-32 (x2 -> 64GB)
Storage: WD_BLACK SN850X 2000GB
Port/Peripheral information
If you are experiencing an issue with a peripheral or an expansion card/port please fill out the following information:
- port 1. AKiTiO Node Titan (but also LG 38WN95C)
- port 4. AKiTiO Node Titan (but also LG 38WN95C)
Standalone Operation
Are you running your mainboard as a standalone device. Is standalone mode enabled in the BIOS?
- Yes
- No
Describe the bug
While connecting Thunderbolt capable device (either eGPU or monitor with Thunderbolt dock integrated) the device doesn't negotiate full 40Gbps. ThinkPad T14 has no issues and is my reference when comes to comparison of behavior.
I went through diagnostic with your support team, the result was motherboard replacement which didn't help. Since then I performed extended diagnostic:
- learned about available TBT registers and noticed, that cable is not recognized
# tbdump -d 1 -r 0 -a 2 -vv -N1 PORT_CS_18
0x00d2 0x00012f00 0b00000000 00000001 00101111 00000000 ../. PORT_CS_18
[00:07] 0x0 Cable USB4 Version
[08:08] 0x1 Bonding Enabled (BE)
[09:09] 0x1 TBT3-Compatible Mode (TCM)
[10:10] 0x1 CLx Protocol Support (CPS)
[11:11] 0x1 RS-FEC Enabled (Gen 2) (RE2)
[12:12] 0x0 RS-FEC Enabled (Gen 3) (RE3)
[13:13] 0x1 Router Detected (RD)
[16:16] 0x1 Wake on Connect Status
[17:17] 0x0 Wake on Disconnect Status
[18:18] 0x0 Wake on USB4 Wake Status
[19:19] 0x0 Wake on Inter-Domain Status
[20:20] 0x0 Cable Gen 3 Support (CG3)
[21:21] 0x0 Cable Gen 4 Support (CG4)
[22:22] 0x0 Cable Asymmetric Support (CSA)
[23:23] 0x0 Cable CLx Support (CSC)
[24:24] 0x0 AsymmetricTransitionInProgress (TIP)
- Sniffed traffic on CC lines of USB cable and noticed, that TBT cable capabilities are never queried:
ThinkPad T14:
269,1906826930.00,,Preamble,,(r3) SRC/UFP[2]: VDM,
270,1907035440.00,SYNC-1,SOP',,,
271,1907052230.00,SYNC-1,,,,
272,1907068570.00,SYNC-3,,,,
273,1907085350.00,SYNC-3,,,,
274,1907101700.00,0xF,H:258F,,,
275,1907118490.00,0x8,,,,
276,1907134840.00,0x5,,,,
277,1907151400.00,0x2,,,,
278,1907168190.00,0x3,[0]8087a043,[1] ACK Disc Mode SVID:8087,,
279,1907184760.00,0x4,,,,
280,1907201100.00,0x0,,,,
281,1907217890.00,0xA,,,,
282,1907234450.00,0x7,,,,
283,1907250800.00,0x8,,,,
284,1907267590.00,0x0,,,,
285,1907283930.00,0x8,,,,
286,1907300720.00,0x1,[1]00030001,[2] VDO:00030001,,
287,1907317070.00,0x0,,,,
288,1907333850.00,0x0,,,,
289,1907350200.00,0x0,,,,
290,1907366990.00,0x3,,,,
291,1907383550.00,0x0,,,,
292,1907399900.00,0x0,,,,
293,1907416690.00,0x0,,,,
Framework doesn't do the above thus it can't be aware of the cable connected.
To be absolutely sure my cables supports the declared functionality I bought KM003C and checked them throughly.
Funnily enough, Framework managed to negotiate 40Gbps once, after few hours of being shut down. I never managed to reproduce it though (I also didn't have / know the tools to inspect registers to see what was different by then).
Also I opened a post on Framework Community Forum where I put up some details: https://community.frame.work/t/curious-thunderbolt-3-egpu-link-speed-case-linux/64027/17 . I followed @Mario_Limonciello advice and tried the latest kernel patch, but it didn't help.
I'm happy to deliver my CC traces if needed.
Steps To Reproduce
Steps to reproduce the behavior:
- Connect AKiTiO Node Titan (or monitor LG 38WN95C) to one of the USB4 capable ports of Framework 16
- Run
boltctlto confirm that the negotiated throughput is not 40Gbps, but 20Gbps - Additionally dump Thunderbolt PORT_CS_18 register to verify that cable capabilities were not discovered
Expected behavior
Cable recognized as TBT3/4 capable and full 40Gbps negotiated.
Screenshots
If applicable, add screenshots to help explain your problem.
Operating System (please complete the following information):
- OS/Distribution: Arch Linux, but tried also on Fedora 41 and Ubuntu 24.10
- Version: ditto
- Linux Kernel Version: 6.13.7, tried also 6.13.7-zen1
Logic analyzer: DSLogic U3Pro32
Framework 16 dumped CC negotiation: Framework16.csv
ThinkPad T14 dumped CC negotiation: ThinkPadT14.csv
learned about available TBT registers and noticed, that cable is not recognized
Note, that the bits 20-24 in PORT_CS_18, which could indicate whether the USB4 controller is aware of cable Gen 3 or Gen 4 capabilities, where first defined in USB4v2. In USB4v1, which all of Frameworks current USB4 controllers follow, these bits were reserved / did not exist and required to be 0.
So your controller will not ever report anything there, following the USB4v1 specification itself.
So this part is not an indicator of sth. going wrong or the cable not being recognized.
Any hope for at least tiny movement here? Is it something what has chances to be looked into?
I'm currently using a TBT3 storage device with BIOS 3.05, which shows a 40 Gbps Rx/Tx speed via the boltctl command. I plan to test this again with an eGPU dock, which we will receive soon.
● Intel USB4.0 SSD X4-1
├─ type: peripheral
├─ name: USB4.0 SSD X4-1
├─ vendor: Intel
├─ uuid: c6030000-0062-641e-03f8-fed920149008
├─ generation: Thunderbolt 3
├─ status: authorized
│ ├─ domain: e7c83804-4039-5f22-ffff-ffffffffffff
│ ├─ rx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ ├─ tx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ └─ authflags: none
├─ authorized: Mon 18 Aug 2025 01:31:24 PM UTC
├─ connected: Mon 18 Aug 2025 01:31:24 PM UTC
└─ stored: Mon 18 Aug 2025 01:31:24 PM UTC
├─ policy: iommu
└─ key: no
This is awesome, thanks. In my case two independent devices doesn't work, tried 4 different cables already, all of them of rather high quality.
Since I got back to this I'll do another dumps, maybe also with oscilloscope, and gonna provide my results here.
Wow. Up until now I was trying to use only passive cables, with length spanning from 0.5m to 0.8m. All of them certified and of good quality. None of them worked.
I decided to buy 2m active cable to give it a try and just guess if it worked (100% reproducible):
● AKiTiO Node Titan
├─ type: peripheral
├─ name: Node Titan
├─ vendor: AKiTiO
├─ uuid: c7010000-0092-9c1e-8352-9482c8018a01
├─ generation: Thunderbolt 3
├─ status: authorized
│ ├─ domain: d3303804-e167-e50e-ffff-ffffffffffff
│ ├─ rx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ ├─ tx speed: 40 Gb/s = 2 lanes * 20 Gb/s
│ └─ authflags: none
├─ authorized: Sun 24 Aug 2025 09:20:40 AM UTC
├─ connected: Sun 24 Aug 2025 09:20:40 AM UTC
└─ stored: Tue 04 Feb 2025 10:08:33 PM UTC
├─ policy: iommu
└─ key: no
Framework, you're definitely have an issue with either cable detection or signal quality.
I'm waiting for some equipment to arrive and I'll dump the CC negotiation again for comparison.
# tbdump -d 1 -r 0 -a 2 -vv -N1 PORT_CS_18
0x00d2 0x00013700 0b00000000 00000001 00110111 00000000 ..7. PORT_CS_18
[00:07] 0x0 Cable USB4 Version
[08:08] 0x1 Bonding Enabled (BE)
[09:09] 0x1 TBT3-Compatible Mode (TCM)
[10:10] 0x1 CLx Protocol Support (CPS)
[11:11] 0x0 RS-FEC Enabled (Gen 2) (RE2)
[12:12] 0x1 RS-FEC Enabled (Gen 3) (RE3) <---- here's the difference
[13:13] 0x1 Router Detected (RD)
[16:16] 0x1 Wake on Connect Status
[17:17] 0x0 Wake on Disconnect Status
[18:18] 0x0 Wake on USB4 Wake Status
[19:19] 0x0 Wake on Inter-Domain Status
[20:20] 0x0 Cable Gen 3 Support (CG3)
[21:21] 0x0 Cable Gen 4 Support (CG4)
[22:22] 0x0 Cable Asymmetric Support (CSA)
[23:23] 0x0 Cable CLx Support (CSC)
[24:24] 0x0 AsymmetricTransitionInProgress (TIP)