Utilizing NAND FLASH requires proper wear leveling and bitflip management. Linux choice for this is UBI. The upstream UBI implementation is far too big for a SPL, but it is desired to load arbitrary payload including u-boot itself from a UBI managed NAND FLASH. That restricts the non-UBI managed part of the NAND flash to the first few eraseblocks which are reserved for the SoC boot ROM to load the SPL.
The following patches provide a lightweight and fast UBI attach and load code, which supports fastmap and full scan mode. The text foot print on the board which I used for development is: 6854 0 0 6854 1abd drivers/mtd/ubispl/built-in.o Attaching a NAND chip with 4096 physical eraseblocks (4 blocks are reserved for the SPL) takes: In full scan mode: 1172ms In fastmap mode: 95ms With that and a moderate sized kernel image, I'm able to hand off to the kernel within less than 500ms. The scan and logical to physical block mapping code is developed from scratch, while the fastmap functions are lifted from the linux kernel source and adjusted to fit the SPL needs. The implementation is paranoid and carefully preserves the UBI robustness. For now I keep a private copy of ubi-media.h which should be shared with the drivers/mtd/ubi/ one once Heiko has synced it to the 3.14 source. There is room for more boot time optimizations: - Implement sub page reads for nand_spl_simple - Hand the UBI data from SPL to kernel to avoid rescan of the fastmap/flash Thanks, tglx _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot