Skip to content

Intermittent EHCI timeout / failed uInitrd load when booting from USB #88

Description

@eliasbakken

Problem

Booting the Reflash USB image sometimes fails partway through U-Boot's boot script, with repeated USB read timeouts while loading uInitrd from the USB drive:

resetting USB...
Bus usb@1c1a400: USB OHCI 1.0
Bus usb@1c1b000: USB EHCI 1.00
Bus usb@1c1b400: USB OHCI 1.0
scanning bus usb@1c1a400 for devices... 2 USB Device(s) found
scanning bus usb@1c1b000 for devices... 6 USB Device(s) found
scanning bus usb@1c1b400 for devices... 1 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found

Device 0: Vendor: VendorCo Rev: 2.00 Prod: ProductCode
            Type: Removable Hard Disk
            Capacity: 30000.0 MB = 29.2 GB (61440000 x 512)
... is now current device
Scanning usb 0:1...
Found U-Boot script /boot.scr
U-boot loaded from eMMC or secondary SD
Boot script loaded from usb
Applying kernel provided DT fixup script (sun50i-a64-fixup.scr)
EHCI timed out on TD - token=0x50008d80
EHCI timed out on TD - token=0x50008d80
EHCI timed out on TD - token=0x50008d80
 ** fs_devread read error - block
Failed to load '/uInitrd'
EHCI timed out on TD - token=0x80008d80
EHCI timed out on TD - token=0x80008d80

Fails specifically on this line in boot.cmd:

load ${devtype} ${devnum} ${ramdisk_addr_r} ${prefix}uInitrd

uInitrd is the largest single file U-Boot has to read off USB during boot (~100MB, since Reflash's whole OS lives in the initrd by design), making it the most exposed step to any USB read flakiness in U-Boot's fairly bare-bones EHCI driver.

Observed correlation with power source

This shows up "every now and then," rarely on some boards, more often on others. Powering the board via the 12-24V input instead of USB-C-only power seems to reduce/avoid it, though this hasn't been pinned down precisely yet.

This is a different symptom from #59 (board shutting down mid-flash on USB-C-only power) - that one is during an active flash write, this one is during the U-Boot boot stage before Reflash's own OS is even running. Both seem sensitive to power source, but are being tracked separately since the failure mode and timing are different.

Notes for investigation

  • Not yet reproduced reliably enough to bisect against a specific USB drive/cable/port.
  • Since uInitrd is unusually large for U-Boot to read over EHCI, shrinking it could reduce exposure even without addressing a possible underlying power-margin cause.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions