[U-Boot] Proposal to add NAND-boot support for Sunxi SPL
Hans de Goede
hdegoede at redhat.com
Mon May 25 20:35:03 CEST 2015
On 22-05-15 09:04, Roy Spliet wrote:
> For my set-up I made use of Boris Brezillon's sunxi-nand tree, or actually I rebased his patches on top of 4.0rc7. This basically adds support for NAND-chip partitioning, ECC and randomisation. Docs for the DT specification in Documentation/devicetree/bindings/mtd/sunxi-nand.txt , and an example can be found in arch/arm/boot/dts/sun7i-a20-cubietruck.dts .  lists the acceptable configuration options for the boot and boot_rescue partitions, make sure to pick one of these (which should be no problem for MLC-type nand). The ECC mode for these boot partitions is called hw_syndrome.
> Assuming you now have a Linux set-up kernel based on this tree with NAND support on an MMC, for U-boot what you should currently do is:
> 1) in include/configs/sunxi-common.h, adjust the parameters <CONFIG_NAND_SUNXI_>PAGE_SIZE, ECC_STEP, ECC_STRENGTH to match your NAND chip and DT configuration.
> 2) Build
> 3) Use your MMC to flash u-boot-sunxi-with-spl.bin onto NAND:
> # flash_erase /dev/mtd0
> # nandwrite -p /dev/mtd0 u-boot-sunxi-with-spl.bin
> 4) Reboot without the MMC card and see U-boot load
Ok, it took me way longer then I wanted (see below) but I've this
working now. It is cool to see u-boot load from nand :)
> That should be all.
> @Alex: To answer your question specifically: It's likely that the parameters in sunxi-common.h mentioned above might not match your NAND-chip configuration in the Linux kernel. I can't tell you precisely how to fetch these details from the 3.4 kernel, sorry. I recall Daniel using 24-bit strength ECC with otherwise equal parameters, but perhaps he can help you with this better than I can.
Alex, could it be that you are writing the nand using
a (rebased) version of bbrezillon's sunxi-nand-next branch ?
I started with that too because it is much newer and contains
various bug fixes, but it seems that it also contains a new
bug causing it to write the NAND in such a way that the BROM
and u-boot SPL code will not read it.
I've just pushed a rebased version of the sunxi-nand branch of
And that works for me, where as before I got the exact same errors
trying to fel load a nand enabled spl.
I'm working on merging over all the changes from the sunxi-nand-next
branch onto my working sunxi-nand-experiment branch 1 by 1 until
I find the one which causes the breakage...
>  https://github.com/bbrezillon/linux-sunxi/commits/sunxi-nand
>  https://linux-sunxi.org/NAND#More_information_on_BROM_NAND
> Op 22-05-15 om 04:23 schreef kaplan2539 at gmail.com:
>> Hi Roy,
>> I could definitely use such a howto. I have applied the patches to the current mainline u-boot head and try to boot my A13-OlinXino Wifi board in FEL mode.
>> I can compile and boot into u-boot via FEL. However, I get these errors when I have CONFIG_SPL_NAND_SUPPORT defined:
>> U-Boot SPL 2015.07-rc1-00276-g77792f9-dirty (May 21 2015 - 19:15:54)
>> DRAM: 512 MiB
>> Failed to set core voltage! Can't set CPU frequency
>> sunxi board_nand_init()
>> Nand initialised
>> Error: 1 ECC failures detected
>> Error: 512 ECC failures detected
>> This is my configs/A13-OLinuXino_defconfig looks like this:
>> # For use with the Olimex 7" LCD module, adjust timings for other displays
>> # Set video-mode=sunxi:800x600-24 at 60,monitor=lcd in the env. to enable
>> I just found out in the sun5i-a13-olinuxino.dts file are no nand settings.
>> I guess I can find the information in the linux-sunxi 3.4 kernels fex file for the olinuxio and need to convert to dts, correct?
>> I am happy about any hints / comments.
>> On Thursday, May 21, 2015 at 11:08:24 AM UTC-7, Hans de Goede wrote:
>> Hi Roy,
>> On 21-05-15 15:59, Roy Spliet wrote:
>> > The following patches take the work by Daniel Kochmánski, and
>> make some
>> > heavy modifications for readability and functionality, based on
>> > Brezillon's Linux driver. Tested on an Olimex Lime w/ A20.
>> > Patches are sent as RFC. Open questions:
>> > - Config options added are partially NAND-chip specific. Some
>> options can
>> > be autodetected based on the NAND ID, others require either
>> > or config options like these. Do they belong in sunxi-common?
>> > we make a Kconfig option for this? If bikeshedding is desired,
>> are defines
>> > in sunxi-common.h good enough for now?
>> > - Style is mostly kernel-like. Satisfied?
>> > - Daniel: do you think we can work from here?
>> > Please comment away!
>> Cool stuff. Overall this looks good I'll reply with more detailed
>> to your individual patches, 2 questions:
>> 1) Can you provide a quick howto (at developer level) on how to
>> get the spl and u-boot into the nand, what I'm looking for is
>> like this:
>> a) Take this git repo + branch, build a kernel from it
>> b) Look at this dts file for a nand settings example, adjust it
>> for your board
>> c) Once booted into the kernel using an updated dts you should
>> have these
>> block devices, dd spl to this one, and u-boot to this one.
>> No more to go more detailed then that :)
>> 2) What is the plan to add support for loading files from nand in
>> u-boot proper,
>> so that we can get (e.g.) extlinux.conf + kernel +dtb from a /boot
>> on nand ?
More information about the U-Boot