Tom Rini ad890cace3 sunxi: Update MAINTAINERS file for recent boards il y a 6 ans
..
MAINTAINERS ad890cace3 sunxi: Update MAINTAINERS file for recent boards il y a 6 ans
Makefile 83d290c56f SPDX: Convert all of our single license tags to Linux Kernel style il y a 7 ans
README.nand df4ad94d05 sunxi: docs: Mention CONFIG_NAND requirement il y a 6 ans
README.sunxi64 297963f5b5 sunxi: Fix typos of spelling Allwinner il y a 6 ans
ahci.c cf7b2e10c9 dm: sata: sunxi: Add support for driver model il y a 7 ans
board.c 31a4ac4d79 sun50i: A64: add support for R_I2C controller il y a 6 ans
dram_sun4i_auto.c b0c8f4a797 Kill unneeded #include <linux/kconfig.h> il y a 9 ans
dram_sun5i_auto.c b0c8f4a797 Kill unneeded #include <linux/kconfig.h> il y a 9 ans
dram_timings_sun4i.h d133647af4 sunxi: dram: Optionally use standard JEDEC timings for sun[457]i il y a 10 ans
gmac.c aba3924927 sunxi: Fix A20-OLinuXino-MICRO LAN8710 support il y a 7 ans
mksunxi_fit_atf.sh 0a21fdd62b sunxi: change ATF position for H6 il y a 6 ans

README.nand

Allwinner NAND flashing
=======================

A lot of Allwinner devices, especially the older ones (pre-H3 era),
comes with a NAND. NANDs storages are a pretty weak choice when it
comes to the reliability, and it comes with a number of flaws like
read and write disturbs, data retention issues, bloks becoming
unusable, etc.

In order to mitigate that, various strategies have been found to be
able to recover from those issues like ECC, hardware randomization,
and of course, redundancy for the critical parts.

This is obviously something that we will take into account when
creating our images. However, the BROM will use a quite weird pattern
when accessing the NAND, and will access only at most 4kB per page,
which means that we also have to split that binary accross several
pages.

In order to accomodate that, we create a tool that will generate an
SPL image that is ready to be programmed directly embedding the ECCs,
randomized, and with the necessary bits needed to reduce the number of
bitflips. The U-Boot build system, when configured for the NAND (with
CONFIG_NAND=y) will also generate the image sunxi-spl-with-ecc.bin
that will have been generated by that tool.

In order to flash your U-Boot image onto a board, assuming that the
board is in FEL mode, you'll need the sunxi-tools that you can find at
this repository: https://github.com/linux-sunxi/sunxi-tools

Then, you'll need to first load an SPL to initialise the RAM:
sunxi-fel spl spl/sunxi-spl.bin

Load the binaries we'll flash into RAM:
sunxi-fel write 0x4a000000 u-boot-dtb.bin
sunxi-fel write 0x43000000 spl/sunxi-spl-with-ecc.bin

And execute U-Boot
sunxi-fel exe 0x4a000000

On your board, you'll now have all the needed binaries into RAM, so
you only need to erase the NAND...

nand erase.chip

Then write the SPL and its backup:

nand write.raw.noverify 0x43000000 0 40
nand write.raw.noverify 0x43000000 0x400000 40

And finally write the U-Boot binary:
nand write 0x4a000000 0x800000 0xc0000

You can now reboot and enjoy your NAND.