eGPU with Thunderbolt 3

I currently have Fedora 39 install on a ASUS CX5400. (I have tried Ubuntu 22.04 and Arch, but Fedora seems to be more stable at the moment.) I have an ADLINK Pocket AI A500 (NVIDIA Ampere) that uses Thunderbolt 3. I am having issues with boltctl detecting a Thunderbolt device.

Steps I’ve tried:

  • Post installation with the chromebook-usbc.service. I checked systemctl and the service seems to have started fine. Rebooted at this point.
  • Powered on the eGPU with an external PD power source. Connect with a Thunderbolt 4 cable. I get the following in dmesg:
[ 1685.088788] usb 3-3: new low-speed USB device number 6 using xhci_hcd
[ 1685.219996] usb 3-3: No LPM exit latency info found, disabling LPM.
[ 1685.226133] usb 3-3: New USB device found, idVendor=0451, idProduct=ace1, bcdDevice= 1.00
[ 1685.226143] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1685.226146] usb 3-3: Product: TPS65982BB
[ 1685.226149] usb 3-3: Manufacturer: Texas Instruments
[ 1685.226151] usb 3-3: SerialNumber: 01.00.00
  • Downloaded ectool from the tree123 site. sudo ./ectool typecstatus 1 showed:
Port C1: enabled, connected  State:Attached.SNK
Role:SNK DFP VCONN, Polarity:CC2
CC State: UFP attached
MUX: USB=1 DP=0 POLARITY=INVERTED HPD_IRQ=0 HPD_LVL=0
     SAFE=0 TBT=0 USB4=0
Port events: 0x00000000
SOP  PD Rev: 3.0
SOP' PD Rev: 3.0
Source Capabilities:
    Fixed: 5000mV 900mA DRP UP USB DRD
Sink Capabilities:
    Fixed: 5000mV 500mA DRP UP USB DRD
  • Change the MUX to TBT by running: sudo ./ectool typeccontrol 1 2 1. Running typecstatus on the same port shows TBT=1 now:
Port C1: enabled, connected  State:Attached.SNK
Role:SNK DFP VCONN, Polarity:CC2
CC State: UFP attached
MUX: USB=0 DP=0 POLARITY=INVERTED HPD_IRQ=0 HPD_LVL=0
     SAFE=0 TBT=1 USB4=0
Port events: 0x00000000
SOP  PD Rev: 3.0
SOP' PD Rev: 3.0
Source Capabilities:
    Fixed: 5000mV 900mA DRP UP USB DRD
Sink Capabilities:
    Fixed: 5000mV 500mA DRP UP USB DRD
  • However, I noticed dmesg showed
[ 1831.537880] usb 3-3: USB disconnect, device number 6
  • Running sudo boltctl list does not show anything.

Is there something I’m missing in order to get a Thunderbolt device to show up? I have a separate Intel desktop with a Thunderbolt port running on Ubuntu that detects this eGPU, so the device and the cable should not be the issue.

Try cold booting the chromebook with the thunderbolt device connected. (refresh + power to force a cold boot)

Thanks for the quick reply. While I have the eGPU powered on and connected, I forced a cold boot by pressing Refresh + Power button. After it boots back again, running sudo boltctl list does not show anything. I repeated the steps to set TBT=1 but doing that shows that the USB disconnected again in dmesg. boltctl also doesn’t show anything at this point either.

@sam got it to work on his Chromebook so maybe he can help

Unfortunately I’ve never encountered this error. What about the output of lspci? Perhaps triggering a PCI rescan might fix it?

# echo 1 > /sys/bus/pci/rescan

Thanks for the response. Here’s the output of lspci

00:00.0 Host bridge: Intel Corporation Device 9a12 (rev 01)
00:02.0 VGA compatible controller: Intel Corporation Tiger Lake-UP4 GT2 [Iris Xe Graphics] (rev 01)
00:04.0 Signal processing controller: Intel Corporation TigerLake-LP Dynamic Tuning Processor Participant (rev 01)
00:07.0 PCI bridge: Intel Corporation Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #0 (rev 01)
00:07.1 PCI bridge: Intel Corporation Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #1 (rev 01)
00:08.0 System peripheral: Intel Corporation GNA Scoring Accelerator module (rev 01)
00:0d.0 USB controller: Intel Corporation Tiger Lake-LP Thunderbolt 4 USB Controller (rev 01)
00:0d.2 USB controller: Intel Corporation Tiger Lake-LP Thunderbolt 4 NHI #0 (rev 01)
00:14.0 USB controller: Intel Corporation Tiger Lake-LP USB 3.2 Gen 2x1 xHCI Host Controller (rev 20)
00:14.2 RAM memory: Intel Corporation Tiger Lake-LP Shared SRAM (rev 20)
00:14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20)
00:15.0 Serial bus controller: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #0 (rev 20)
00:15.1 Serial bus controller: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #1 (rev 20)
00:15.2 Serial bus controller: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #2 (rev 20)
00:15.3 Serial bus controller: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #3 (rev 20)
00:16.0 Communication controller: Intel Corporation Tiger Lake-LP Management Engine Interface (rev 20)
00:19.0 Serial bus controller: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #4 (rev 20)
00:19.1 Serial bus controller: Intel Corporation Tiger Lake-LP Serial IO I2C Controller #5 (rev 20)
00:1c.0 PCI bridge: Intel Corporation Tiger Lake-LP PCI Express Root Port #8 (rev 20)
00:1d.0 PCI bridge: Intel Corporation Tiger Lake-LP PCI Express Root Port #9 (rev 20)
00:1e.0 Communication controller: Intel Corporation Tiger Lake-LP Serial IO UART Controller #0 (rev 20)
00:1e.2 Serial bus controller: Intel Corporation Device a0aa (rev 20)
00:1e.3 Serial bus controller: Intel Corporation Tiger Lake-LP Serial IO SPI Controller #1 (rev 20)
00:1f.0 ISA bridge: Intel Corporation Device a087 (rev 20)
00:1f.3 Multimedia audio controller: Intel Corporation Tiger Lake-LP Smart Sound Technology Audio Controller (rev 20)
00:1f.5 Serial bus controller: Intel Corporation Tiger Lake-LP SPI Controller (rev 20)
57:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS522A PCI Express Card Reader (rev 01)
58:00.0 Non-Volatile memory controller: Intel Corporation SSD 670p Series [Keystone Harbor] (rev 03)

I tried to run sudo bash -c "echo 1 > /sys/bus/pci/rescan" after setting typeccontrol to TBT=1 and verifying with typecstatus, but I don’t see any changes. lspci remained the same, and dmesg didn’t show any new entries. I also checked /sys/bus/thunderbolt/devices/ and it listed these two directories that were already there before I plugged in any new devices.

0-0 domain0

Here are some more information if they’re helpful:

lsmod | grep -E 'cros_ec_typec|intel_pmc_mux'

cros_ec_typec          40960  0
intel_pmc_mux          12288  14
typec                 114688  2 cros_ec_typec,intel_pmc_mux
cros_usbpd_notify      20480  2 cros_ec_typec,cros_usbpd_charger

Okay so I did some test and turns out not all distribution could work. I ran Fedora 39 and it pretty much work by just changing the type-c mode:

lspci -tv:

-[0000:00]-+-00.0  Intel Corporation Device 4621
           +-02.0  Intel Corporation Alder Lake-P Integrated Graphics Controller
           +-04.0  Intel Corporation Alder Lake Innovation Platform Framework Processor Participant
           +-06.0-[01]----00.0  Sandisk Corp WD Black SN770 / PC SN740 256GB / PC SN560 (DRAM-less) NVMe SSD
           +-07.0-[02-2c]----00.0-[03-2c]--+-00.0-[04]----00.0  Fresco Logic FL1100 USB 3.0 Host Controller
           |                               +-01.0-[05]----00.0  Fresco Logic FL1100 USB 3.0 Host Controller
           |                               +-02.0-[06]----00.0  ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller
           |                               +-03.0-[07]----00.0  Intel Corporation I210 Gigabit Network Connection
           |                               \-04.0-[08-2c]----00.0-[09-0c]----01.0-[0a-0c]----00.0-[0b-0c]----00.0-[0c]--+-00.0  Advanced Micro Devices, Inc. [AMD/ATI] Device 747e
           |                                                                                                            \-00.1  Advanced Micro Devices, Inc. [AMD/ATI] Navi 31 HDMI/DP Audio
           +-07.1-[2d-57]--
           +-07.2-[58-82]--
           +-07.3-[83-ad]--
           +-08.0  Intel Corporation 12th Gen Core Processor Gaussian & Neural Accelerator
           +-0a.0  Intel Corporation Platform Monitoring Technology
           +-0d.0  Intel Corporation Alder Lake-P Thunderbolt 4 USB Controller
           +-0d.2  Intel Corporation Alder Lake-P Thunderbolt 4 NHI #0
           +-0d.3  Intel Corporation Alder Lake-P Thunderbolt 4 NHI #1
           +-14.0  Intel Corporation Alder Lake PCH USB 3.2 xHCI Host Controller
           +-14.2  Intel Corporation Alder Lake PCH Shared SRAM
           +-14.3  Intel Corporation Alder Lake-P PCH CNVi WiFi
           +-15.0  Intel Corporation Alder Lake PCH Serial IO I2C Controller #0
           +-15.1  Intel Corporation Alder Lake PCH Serial IO I2C Controller #1
           +-16.0  Intel Corporation Alder Lake PCH HECI Controller
           +-19.0  Intel Corporation Alder Lake-P Serial IO I2C Controller #0
           +-19.1  Intel Corporation Alder Lake-P Serial IO I2C Controller #1
           +-1e.0  Intel Corporation Alder Lake PCH UART #0
           +-1f.0  Intel Corporation Alder Lake PCH eSPI Controller
           +-1f.3  Intel Corporation Alder Lake PCH-P High Definition Audio Controller
           +-1f.4  Intel Corporation Alder Lake PCH-P SMBus Host Controller
           \-1f.5  Intel Corporation Alder Lake-P PCH SPI Controller

dmesg:

...
[   76.480803] typec port0: bound card1-DP-3 (ops typec_connector_ops)
[   76.480814] typec port0: bound usb3-port1 (ops connector_ops)
[   76.480821] typec port0: bound usb2-port1 (ops connector_ops)
[   76.480824] typec port0: bound usb4_port1 (ops connector_ops [thunderbolt])
[   76.480902] typec port1: bound card1-DP-4 (ops typec_connector_ops)
[   76.480906] typec port1: bound usb3-port2 (ops connector_ops)
[   76.480909] typec port1: bound usb2-port2 (ops connector_ops)
[   76.480911] typec port1: bound usb4_port3 (ops connector_ops [thunderbolt])
[  100.717392] thunderbolt 0-0:1.1: new retimer found, vendor=0x8087 device=0x15ee
[  101.567587] thunderbolt 0-1: new device found, vendor=0x3d device=0x11
[  101.567592] thunderbolt 0-1: CalDigit, Inc. TS3 Plus
[  102.259137] thunderbolt 0-301: new device found, vendor=0x127 device=0x1
[  102.259142] thunderbolt 0-301: Razer Core X
...

However, I tried booting Manjaro, and I’m experiencing the same error as you. What I noticed was that in Manjaro I had an error in my systemd modprobe service where intel_pmc_mux wasn’t removed because it is in use.

modprobe: WARNING: Module intel_pmc_mux is in use.

Might I suggest trying to boot Fedora 39 on a live USB and try doing the modprobe service manually? Meanwhile, I’ll try to debug it further.

Thanks for helping with the debugging!

I am using Fedora 39 currently as I’ve experienced the same systemd issue with Ubuntu and Arch. And I occasionally get system freezes with the latter distros when connecting the Thunderbolt device. However even on Fedora 39, I can’t get the typec or thunderbolt messages to show up in dmesg. I use ectool from tree’s website and ran sudo ectool typeccontrol 1 2 1 while the device is connected. Is there anything missing?

I wonder if the age of the EC matters? According to the CrOS EC Readme, devices prior to July 2021 use a Legacy EC. My COPANO device seemed to have been released around June 2021. I noticed you’re using an Alder Lake device which should definitely be using the newer EC.

Little update: my dumb ass set the wrong port ID with ectool in Manjaro. With the right port ID, now I could use the eGPU on Manjaro too, so the issue is not related to the distribution after all. Interestingly, because of the systemd service error I faced, I tried to run ectool without modprobing first and it still works, so some distro doesn’t even need the systemd service.

I also used ectool from tree’s utils site.

Regarding freezes, I also got some when I initially authorize the device. However, a quick reboot solves the problem and the thunderbolt device is detected normally.

Regarding EC version, I only own one Chromebook so unfortunately I don’t know if it matters or not…

Do you have something that you would like me to try? I’m kind of running out of idea of what to debug. Here’s my EC version:

RO version:    banshee_v2.0.18619-043c2a0a54
RO cros fwid:  banshee_14505.228.0
RW version:    banshee_v2.0.20911-c91ee7328e
RW cros fwid:  banshee_15357.0.23_04_23
Firmware copy: RW
Build info:    banshee_v2.0.20911-c91ee7328e banshee_15357.0.23_04_23 2023-04-23 15:18:13 MrChromebox
Tool version:  0.0.1-isolate Jun 23 2023 none

My ectool version shows:

RO version:    copano_v2.0.7616-b489fc223e
RW version:    copano_v2.0.10154-ea173525ac
Firmware copy: RW
Build info:    copano_v2.0.10154-ea173525ac 2023-03-10 15:46:42 MrChromebox
Tool version:  0.0.1-isolate Jun 23 2023 none

Interestingly, I don’t have RO cros fwid or RW cros fwid. I’m not exactly sure what these are.

If I’m not missing any steps, then I’m not sure what else to try. My eGPU could also be incompatible with the way the EC works with Thunderbolt. I’m not opposed to trying the paid Windows Thunderbolt drivers either. Maybe that help rule out driver differences or eGPU incompatibility. Appreciate the help so far!

how does your testing fare in Fedora 40?

I didn’t notice any improvement with Fedora 40 unfortunately. I performed the same steps, and the last thing I see in dmesg is “USB disconnected”. No eGPU is detected still.