Files
2026-09-03 18:23:24 -05:00

1.8 KiB

eGPU dock bring-up runbook

Our flasher is a port of comma's known-working one, byte-identical firmware bundle, but it has never touched real hardware. Order matters: everything read-only first, evidence at every step.

Run everything as root from the repo root on the device, dock on the USB-C port, car ignition off.

1. Read-only probe (safe, run first, share the output)

sudo python3 iqpilot/system/hardware/egpu_dock/dock_probe.py

Expected on a dock previously flashed by stock openpilot: product matches the bundled custom ed4e39b7-CLEAN, USB3 speed, PCIe link L0, stable config read. Any other result: stop and send the output before proceeding.

2. Flash-path validation (writes, but writes the same bytes)

A stock-flashed dock already runs our exact bundled firmware, so the no-op path proves version detection:

sudo python3 iqpilot/system/hardware/egpu_dock/flash.py

Expected: "firmware matches" and no write. Then exercise the full write path by reflashing the identical image:

sudo python3 iqpilot/system/hardware/egpu_dock/flash.py --force

This backs up the per-unit config page to /data/egpu_dock_config/ first and verifies every sector; identical bytes make it the lowest-risk possible full-path test. Re-run step 1 after; product string and config sha must be unchanged.

3. Runtime

Set IQEgpuEnabled, go onroad (bench is fine), and confirm iqegpumodeld downloads/compiles and the selector reports UsbGpu* status. The runtime gate requires the exact bundled firmware product string, so a dock that failed step 2 will be treated as absent by design.

If anything goes wrong

The dock falling back to the ROM bootloader (product "USB 3.2 PCIe TinyEnclosure" or AS2462*) is recoverable: flash.py handles ROM recovery, and the config backup from step 2 is on disk. Do not improvise register writes; capture output and stop.