[U-Boot] am335x based board nand boot crashes to ubi0 error

matti kaasinen matti.kaasinen at gmail.com
Thu Jan 5 15:16:01 CET 2017


Hi!
I would need help related to nand boot with am335x based board. Board boots
from mmc (sd card), but not from nand flash.
I have been using yocto/poky build system with meta-ti layer that brings up
u-boot-ti-staging. Current u-boot version is 2016.05 and
linux-ti-staging-rt-4.4.

I have used am335x_evm config (include/configs/am335x_evm.h) that I have
made minor modifications to suit it to my board. Most of the modifications
are made to board/ti/am335x/board.c and mux.c to adapt to different
memories and pin mappings and lack of card id eeprom.

This story is "follow up" to
http://lists.denx.de/pipermail/u-boot/2017-January/277168.html. So, I2C was
initialized somehow when booting from mmc, but not when booting from nand.

"Follow up" part:
Board did still not start booting kernel even though I2C init problem was
fixed.

The reason was that boot_targets variable has been assigned with
mmc0 legacy_mmc0 mmc1 legacy_mmc1 nand0 pxe dhcp
when main u-boot is brought up. These values are iterated when
distro_bootcmd is executed.
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
I made minor modification to distro_bootcmd:
distro_bootcmd=for target in ${boot_targets}; do echo "======= ${target}
=======" ; run bootcmd_${target}; done
Please find the distro_bootcmd running results below:
=> run distro_bootcmd
======= mmc0 =======
Card did not respond to voltage select!
======= legacy_mmc0 =======
Card did not respond to voltage select!
Card did not respond to voltage select!
======= mmc1 =======
data abort
pc : [<8ff70fa0>]          lr : [<8ff701e9>]
reloc pc : [<8081dfa0>]    lr : [<8081d1e9>]
sp : 8ef286f0  ip : 8ff5891d     fp : 00000003
r10: 8ffb3b18  r9 : 8ef32ed8     r8 : 8ef41b10
r7 : 8ff584bd  r6 : 8ef39478     r5 : 8ef39500  r4 : 47810000
r3 : 8ff70f91  r2 : 00014892     r1 : 00000000  r0 : 8ef39500
Flags: nZCv  IRQs off  FIQs on  Mode SVC_32
Resetting CPU ...

So, MMC1 was troublemaker this time.
I removed mmc1 from that command - I do not have mmc1 on my board.
=> setenv boot_targets ' mmc0 legacy_mmc0  nand0 '

Please find modified command results below:
=> run distro_bootcmd
======= mmc0 =======
Card did not respond to voltage select!
======= legacy_mmc0 =======
Card did not respond to voltage select!
Card did not respond to voltage select!
======= nand0 =======
## Error: "bootcmd_nand0" not defined

NOTE!! Is this a bug in u-boot-ti? There is no bootcmd_nand0 in u-boot
memory at this time. However, there is bootcmd_nand. So, I changed nand0 to
nand
=> setenv boot_targets ' mmc0 legacy_mmc0  nand'
=> run distro_bootcmd
======= mmc0 =======
Card did not respond to voltage select!
======= legacy_mmc0 =======
Card did not respond to voltage select!
Card did not respond to voltage select!
======= nand =======
Booting from nand ...

NAND read: device 0 offset 0x80000, size 0x40000
 262144 bytes read: OK

NAND read: device 0 offset 0x200000, size 0x800000
 8388608 bytes read: OK
Kernel image @ 0x82000000 [ 0x000000 - 0x2c4fd8 ]
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
   Loading Device Tree to 8ef1b000, end 8ef27614 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Initializing cgroup subsys cpu

....... lots of listing and then ......
[    1.172458] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
[    1.179257] nand: Micron MT29F2G08ABAEAWP
[    1.183469] nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048,
OOB size: 64
[    1.191491] nand: using OMAP_ECC_BCH8_CODE_HW ECC scheme
[    1.197164] 10 ofpart partitions found on MTD device 8000000.nand
[    1.203607] Creating 10 MTD partitions on "8000000.nand":
[    1.209285] 0x000000000000-0x000000020000 : "NAND.SPL"
[    1.216261] 0x000000020000-0x000000040000 : "NAND.SPL.backup1"
[    1.223834] 0x000000040000-0x000000060000 : "NAND.SPL.backup2"
[    1.231275] 0x000000060000-0x000000080000 : "NAND.SPL.backup3"
[    1.238794] 0x000000080000-0x0000000c0000 : "NAND.u-boot-spl-os"
[    1.246571] 0x0000000c0000-0x0000001c0000 : "NAND.u-boot"
[    1.254316] 0x0000001c0000-0x0000001e0000 : "NAND.u-boot-env"
[    1.261612] 0x0000001e0000-0x000000200000 : "NAND.u-boot-env.backup1"
[    1.269653] 0x000000200000-0x000000a00000 : "NAND.kernel"
[    1.283112] 0x000000a00000-0x000010000000 : "NAND.file-system"
[    1.520856] tps65217 0-0024: TPS65217 ID 0xe version 1.2
[    1.526486] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[    1.533461] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 400 kHz
[    1.539830] ubi0: attaching mtd9
[    1.543810] ubi0 error: validate_ec_hdr: bad VID header offset 512,
expected 2048
[    1.551672] ubi0 error: validate_ec_hdr: bad EC header
[    1.557063] Erase counter header dump:
[    1.560998]  magic          0x55424923
[    1.564930]  version        1
[    1.568041]  ec             1
[    1.571151]  vid_hdr_offset 512
[    1.574444]  data_offset    2048
[    1.577831]  image_seq      1630296601
[    1.581762]  hdr_crc        0x988c84d
[    1.585600] erase counter header hexdump:
[    1.589844] CPU: 0 PID: 1 Comm: swapper Not tainted
4.4.39-rt49-g9d47072444 #2
[    1.597427] Hardware name: Generic AM33XX (Flattened Device Tree)
[    1.603824] Backtrace:
[    1.606422] [<c0013380>] (dump_backtrace) from [<c001357c>]
(show_stack+0x18/0x1c)
[    1.614370]  r7:00000000 r6:00000001 r5:cf027000 r4:cf419000
[    1.620337] [<c0013564>] (show_stack) from [<c0295998>]
(dump_stack+0x24/0x28)
[    1.627937] [<c0295974>] (dump_stack) from [<c03c1e24>]
(validate_ec_hdr+0xc0/0x12c)
[    1.636077] [<c03c1d64>] (validate_ec_hdr) from [<c03c2a6c>]
(ubi_io_read_ec_hdr+0x168/0x218)
[    1.645047]  r7:cf027000 r6:55424923 r5:cf419000 r4:00000000
[    1.651012] [<c03c2904>] (ubi_io_read_ec_hdr) from [<c03c75d0>]
(ubi_attach+0x164/0x14b8)
[    1.659607]  r10:cf3e3c80 r9:c07d5b1c r8:00000000 r7:cf027000
r6:00000000 r5:cf027000
[    1.667854]  r4:00000000
[    1.670519] [<c03c746c>] (ubi_attach) from [<c03bc768>]
(ubi_attach_mtd_dev+0x6d0/0xc50)
[    1.679011]  r10:00000800 r9:00000840 r8:cf3d8400 r7:cf027000
r6:00000000 r5:cf3d8400
[    1.687256]  r4:fffff800
[    1.689923] [<c03bc098>] (ubi_attach_mtd_dev) from [<c0743300>]
(ubi_init+0x1c8/0x250)
[    1.698240]  r10:0000006e r9:c079d600 r8:00000000 r7:c0756734
r6:c0756738 r5:cf3d8400
[    1.706487]  r4:00000000
[    1.709153] [<c0743138>] (ubi_init) from [<c00096a4>]
(do_one_initcall+0x98/0x1e0)
[    1.717099]  r8:00000000 r7:cf3e6a80 r6:c07623a0 r5:c0743138 r4:c07623a0
[    1.724169] [<c000960c>] (do_one_initcall) from [<c0722e84>]
(kernel_init_freeable+0x138/0x1dc)
[    1.733301]  r8:c07225ec r7:c0751838 r6:c0751834 r5:c079d600 r4:00000007
[    1.740386] [<c0722d4c>] (kernel_init_freeable) from [<c053948c>]
(kernel_init+0x10/0xf0)
[    1.748973]  r10:00000000 r9:00000000 r8:00000000 r7:00000000
r6:00000000 r5:c053947c
[    1.757220]  r4:00000000
[    1.759887] [<c053947c>] (kernel_init) from [<c000f980>]
(ret_from_fork+0x14/0x34)
[    1.767835]  r5:c053947c r4:00000000
[    1.771596] ubi0 error: ubi_io_read_ec_hdr: validation failed for PEB 0
[    1.778549] ubi0 error: ubi_attach_mtd_dev: failed to attach mtd9, error
-22
[    1.785991] UBI error: cannot attach mtd9
[    1.790295] hctosys: unable to open rtc device (rtc0)
[    1.801005] UBIFS error (pid: 1): cannot open "ubi0:rootfs", error
-19VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error
-19
[    1.814905] Please append a correct "root=" boot option; here are the
available partitions:
[    1.823726] 1f00             128 mtdblock0  (driver?)
[    1.829039] 1f01             128 mtdblock1  (driver?)
[    1.834351] 1f02             128 mtdblock2  (driver?)
[    1.839661] 1f03             128 mtdblock3  (driver?)
[    1.844974] 1f04             256 mtdblock4  (driver?)
[    1.850282] 1f05            1024 mtdblock5  (driver?)
[    1.855606] 1f06             128 mtdblock6  (driver?)
[    1.860915] 1f07             128 mtdblock7  (driver?)
[    1.866245] 1f08            8192 mtdblock8  (driver?)
[    1.871553] 1f09          251904 mtdblock9  (driver?)
[    1.876884] Kernel panic - not syncing: VFS: Unable to mount root fs on
unknown-block(0,0)

Now I'm terrified!!
This reminds me for years back when I tried to boot from 3.x kernel written
ubifs partition from u-boot.
I never managed in that. I could touch ubifs filesystem from Linux or
u-boot, but if I did so from Linux, I could not touch it from u-boot
anymore and vice versa.
Later on it worked with newer u-boot.

Procedure I did now from SD card booted linux 4.4 for writing rootfs to
mtdblock9 is listed below:
-------------------------------------------------
    flash_erase /dev/mtd9 0 0 > /dev/null
    ubiformat /dev/mtd9 > /dev/null

    ubiattach -p /dev/mtd9 > /dev/null
    ubimkvol -N rootfs -m /dev/ubi0 > /dev/null
    mkdir -p /mnt/flash
    mount -t ubifs ubi0:rootfs /mnt/flash > /dev/null

    tar -C /mnt/flash -xf rootfs.tgz > /dev/null
    sync
    umount /mnt/flash > /dev/null
    ubidetach -p /dev/mtd9 > /dev/null
-------------------------------------------------
Did I do anything wrong in creating that? It is quite accessible from Linux.
Do anyone know how to fix this problem? Have nand boot been tested with
am335x_evm board? I'm somewhat worried about that as there was that nand0
device in boot_targets...

Thanks,
Matti


More information about the U-Boot mailing list