Skip to content

v1.3.0 β€” Ethernet works 🌐

Choose a tag to compare

@petronijus petronijus released this 24 Jun 21:32

[1.3.0] - 2026-06-24

Fixed

  • On-board LAN9500A USB-Ethernet now works on mainline 6.12 🌐 β€” the
    long-standing "intermittent / never enumerates" problem is resolved. The
    chip enumerates on every boot (0424:9e00 β†’ smsc95xx … eth0), the link comes
    up at 100 Mbps/Full and passes traffic cleanly. Verified on hardware: 5/5
    reboots all enumerate, 600 sustained pings at 0 % loss, 410 MB moved with
    zero rx/tx/CRC/drop errors. Root cause was two combined bugs, both found by
    stock-parity auditing against the factory Android kernel:
    • Patch 0012 (mfd: omap-usb-host): mainline only enables the per-port
      UTMI functional clock (usb_host_hs_utmi_pN_clk β€” the L3INIT CLKCTRL
      OPTFCLKEN gate) for TLL/HSIC port modes. An external-PHY (ehci-phy)
      port falls through to default: and never gets its clock, so the port-1 UTMI
      link block ran unclocked (clk_summary showed it disabled) and the
      controller never latched the downstream connect (PORTSC CCS stuck 0). Added
      OMAP_EHCI_PORT_MODE_PHY to the clock enable/disable paths.
    • Patch 0006 (usb: ehci-omap): stock's omap_ehci_soft_phy_reset (the
      UHH softreset / gpio pulse / clock re-park / ULPI register burst) is not
      the EHCI .reset hook β€” it is a runtime ehci_hub_control recovery
      handler that only fires when a port reset/resume times out, after a
      device has connected. We were running that whole sequence at bring-up, which
      blocked the very first connect. The .reset hook is now a plain
      ehci_setup() bring-up (the USB3320's reset defaults already put it in host
      mode); the ULPI/UHH recovery helpers are retained for a future hub_control
      hook.

Changed

  • All kernel patch headers now carry petronijus@bastla.com (was a work email /
    placeholder).

Artifacts

  • nexusq-boot-v1.3.0.img β€” kernel-only change (the ethernet fix); flash to the
    boot partition. The rootfs is unchanged from v1.2.0 β€” reuse
    nexusq-rootfs-v1.2.0-sparse.img from the v1.2.0 release.

Full Changelog: v1.2.0...v1.3.0