Skip to content

v2.0 - VF61 verified on hardware, two NAND fixes

Latest

Choose a tag to compare

@mfide mfide released this 18 Aug 10:22
· 3 commits to main since this release
1492c68

What changed since v1.0

The Colibri VF61 now runs on hardware. v1.0 shipped VF61 support that was
build tested only, and it could not have worked: mainline cannot read the
112-byte OOB NAND on that module. Verified on an 0012 Colibri VF61 256MB IT V1.2B (serial 08449335, Macronix MX30LF4G28AC) on an Iris V2.0 - boots from
NAND, mounts its UBIFS root, login on ttyLP0. Full console output in
docs/boot-log-colibri-vf61-v1.2b-iris.txt.

Two kernel patches for the Vybrid NAND controller, both upstream bugs
found on this hardware:

  1. reads on chips with more than 64 bytes of OOB: the driver clamps
    mtd->oobsize to the 64 bytes its ECC layout uses, but nand_scan_tail()
    restores the value from the memory organization right after
    ->attach_chip(), so every ECC-protected read fails and UBI cannot
    attach. Broken upstream since v5.2. The VF50 is unaffected, its chip has
    exactly 64 bytes.
  2. false bitflips on reads of erased pages: the ECC engine leaves a bogus
    correction in its buffer when it cannot decode a page, so every erased
    page counted as one corrected bitflip - 18035 false counts over a 126 MiB
    partition on the VF50 - which makes the MTD statistics useless for flash
    health monitoring.

Both are on their way to linux-mtd. The credit for spotting them goes to
Edward Karpicz.

Unchanged from v1.0: U-Boot 2026.07, Linux 6.18.44, Toradex BSP 7.7.0.

Images

File Modules tested with it
sdcard-colibri-vf50-6.18.44.tar.xz 0010 Colibri VF50 128MB V1.2A (MX30LF1G08AA) and 0013 Colibri VF50 128MB IT V1.2B (MX30LF1G18AC) - rebuilt with the fixes above
sdcard-colibri-vf61-6.18.44.tar.xz 0012 Colibri VF61 256MB IT V1.2B (MX30LF4G28AC)

Console logs for all three modules, U-Boot banner through tdx-info, are in
docs/.

Extract onto a FAT32 SD card (flash_blk.img and colibri_vf/ at the root),
then in U-Boot:

run setupdate
run update
reset