Introduce a new sunxi-spl-with-ecc.bin image with already the right header, ECC, randomizer and padding for the BROM to be able to read it. It needs to be flashed using a raw access to the NAND so that the controller doesn't change a thing to it, since we already have all the right parameters. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com> Reviewed-by: Heiko Schocher <hs@denx.de>master
parent
ff93c28265
commit
d2fdcc76e8
@ -0,0 +1,54 @@ |
|||||||
|
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 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. |
Loading…
Reference in new issue