The MOCHAbin DTS (armada-7040-mochabin.dts) enables cp0_usb3_1 — the
mPCIe slot's USB 2.0 controller — with `status = "okay"` but assigns
no PHY. Result: the xhci driver registers the controller but it has
no signaling path; USB devices plugged into the mPCIe slot do not
enumerate.
This patch assigns the UTMI PHY (cp0_utmi1) to cp0_usb3_1, matching
the upstream armada-7040-db reference design for that controller.
After the patch, both USB3 host controllers bind at boot (was 1):
xhci-hcd f2500000.usb: cp0_usb3_0 (SMSC hub)
xhci-hcd f2510000.usb: cp0_usb3_1 (mPCIe slot, new)
The 6 SerDes (comphy) lanes are all allocated to other peripherals
(eth0=SFP+, eth1=Topaz, usb3_0=SMSC, sata0×2, pcie2=mPCIe). No lane
is available for USB 3.0 SuperSpeed on the slot, but the slot's USB
pins are USB 2.0 only by design — UTMI alone is correct.
Board-validated 2026-05-20 on gk2 (MOCHAbin):
Before patch: lsusb shows 2 buses (cp0_usb3_0)
After patch: lsusb shows 4 buses (cp0_usb3_0 + cp0_usb3_1 = 4)
NOTE: this patch is necessary but not sufficient for cellular modems
in the mPCIe slot to actually enumerate. The slot's W_DISABLE# /
power-enable sequencing also needs investigation. The Quectel EP06-E
plugged into J5 on gk2 still doesn't enumerate after this patch
(lspci shows the PCIe bridge with `[disabled]` memory window — modem
is electrically dark on both USB and PCIe interfaces). See #255 for
the remaining hardware investigation.
Ref #255
Co-authored-by: CyberMind-FR <gandalf@Gk2.net>
- Add build-kernel.sh for cross-compiling kernel 6.6.x LTS with LED as module
- Add secubox-led-reset tool for I2C recovery via rmmod/modprobe
- Add initramfs modules.d configs for LED (leds-is31fl319x) and USB network
- Update debian/rules to install initramfs configs and led-reset tool
- Fix .gitignore to track build-kernel.sh
LED driver as module (=m) allows recovery from I2C bus hang without reboot:
rmmod leds_is31fl319x && modprobe leds_is31fl319x
USB network modules (usbnet, cdc_ether, cdc_ncm, rndis_host) added for
Eye Remote gadget support at early boot.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Created kernel patches to fix I2C timing issues with IS31FL319X LED
controller on Marvell Armada platforms (errata FE-8471889):
- 001-leds-is31fl319x-add-i2c-delays.patch: Adds 1ms delays between
I2C register writes in LED driver to prevent bus errors
- 002-i2c-mv64xxx-increase-errata-delay.patch: Increases mv64xxx
errata delay from 5µs to 50µs for more reliable operation
Updated .gitignore to track kernel-build/patches/ while still
ignoring build outputs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Kernel 6.12.x has mv64xxx I2C driver timing issues causing LED write
failures (-EIO). OpenWrt kernel 6.6.119 works perfectly with the same
IS31FL3199 LED chip.
Updated build instructions to use kernel 6.6.137 LTS (same generation
as OpenWrt) for reliable I2C/LED support on MOCHAbin.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>