From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Mon, 25 May 2015 20:35:03 +0200 Subject: [U-Boot] Proposal to add NAND-boot support for Sunxi SPL In-Reply-To: <555ED504.6020904@ultimaker.com> References: <1432216765-8421-1-git-send-email-r.spliet@ultimaker.com> <555E1F0F.5000001@redhat.com> <8f6eb28e-558d-4ac9-ad95-e5c6be4cb870@googlegroups.com> <555ED504.6020904@ultimaker.com> Message-ID: <55636B57.8080500@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 22-05-15 09:04, Roy Spliet wrote: > Hello, > > For my set-up I made use of Boris Brezillon's sunxi-nand tree[1], 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 . [2] 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 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 Boris here: https://github.com/jwrdegoede/linux-sunxi/commits/sunxi-nand-experiment 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... Regards, Hans > > Cheers, > > Roy > > [1] https://github.com/bbrezillon/linux-sunxi/commits/sunxi-nand > [2] 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: >> CONFIG_SYS_EXTRA_OPTIONS="CONS_INDEX=2,AXP209_POWER,USB_EHCI,SYS_MAX_NAND_DEVICE=1,SYS_NAND_BASE=0x00" >> CONFIG_NAND=y >> CONFIG_SUNXI_NAND=y >> CONFIG_SUNXI_DMA=y >> CONFIG_CMD_NAND=y >> CONFIG_SPL_NAND_SUPPORT=y >> CONFIG_SPL=y >> CONFIG_FDTFILE="sun5i-a13-olinuxino.dtb" >> CONFIG_USB1_VBUS_PIN="PG11" >> CONFIG_VIDEO_HDMI=n >> CONFIG_VIDEO_VGA_VIA_LCD=y >> CONFIG_VIDEO_VGA_VIA_LCD_FORCE_SYNC_ACTIVE_HIGH=y >> # 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 >> CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:16,ri:209,up:22,lo:22,hs:30,vs:1,sync:3,vmode:0" >> CONFIG_VIDEO_LCD_POWER="AXP0-0" >> CONFIG_VIDEO_LCD_BL_PWM="PB2" >> CONFIG_ARM=y >> CONFIG_ARCH_SUNXI=y >> CONFIG_MACH_SUN5I=y >> CONFIG_DRAM_CLK=408 >> CONFIG_DRAM_ZQ=123 >> CONFIG_DRAM_EMR1=0 >> CONFIG_DEFAULT_DEVICE_TREE="sun5i-a13-olinuxino" >> >> 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. >> >> Thanks >> Alex >> >> >> >> 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 >> Boris >> > 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 >> brute-forcing >> > or config options like these. Do they belong in sunxi-common? >> Should >> > 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 >> feedback >> to your individual patches, 2 questions: >> >> 1) Can you provide a quick howto (at developer level) on how to >> actually >> get the spl and u-boot into the nand, what I'm looking for is >> unstructions >> 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 ? >> >> Regards, >> >> Hans >> > >