]>
Commit | Line | Data |
---|---|---|
d2fdcc76 MR |
1 | Allwinner NAND flashing |
2 | ======================= | |
3 | ||
4 | A lot of Allwinner devices, especially the older ones (pre-H3 era), | |
5 | comes with a NAND. NANDs storages are a pretty weak choice when it | |
6 | comes to the reliability, and it comes with a number of flaws like | |
7 | read and write disturbs, data retention issues, bloks becoming | |
8 | unusable, etc. | |
9 | ||
10 | In order to mitigate that, various strategies have been found to be | |
11 | able to recover from those issues like ECC, hardware randomization, | |
12 | and of course, redundancy for the critical parts. | |
13 | ||
14 | This is obviously something that we will take into account when | |
15 | creating our images. However, the BROM will use a quite weird pattern | |
16 | when accessing the NAND, and will access only at most 4kB per page, | |
17 | which means that we also have to split that binary accross several | |
18 | pages. | |
19 | ||
20 | In order to accomodate that, we create a tool that will generate an | |
21 | SPL image that is ready to be programmed directly embedding the ECCs, | |
22 | randomized, and with the necessary bits needed to reduce the number of | |
23 | bitflips. The U-Boot build system, when configured for the NAND will | |
24 | also generate the image sunxi-spl-with-ecc.bin that will have been | |
25 | generated by that tool. | |
26 | ||
27 | In order to flash your U-Boot image onto a board, assuming that the | |
28 | board is in FEL mode, you'll need the sunxi-tools that you can find at | |
29 | this repository: https://github.com/linux-sunxi/sunxi-tools | |
30 | ||
31 | Then, you'll need to first load an SPL to initialise the RAM: | |
32 | sunxi-fel spl spl/sunxi-spl.bin | |
33 | ||
34 | Load the binaries we'll flash into RAM: | |
35 | sunxi-fel write 0x4a000000 u-boot-dtb.bin | |
36 | sunxi-fel write 0x43000000 spl/sunxi-spl-with-ecc.bin | |
37 | ||
38 | And execute U-Boot | |
39 | sunxi-fel exe 0x4a000000 | |
40 | ||
41 | On your board, you'll now have all the needed binaries into RAM, so | |
42 | you only need to erase the NAND... | |
43 | ||
44 | nand erase.chip | |
45 | ||
46 | Then write the SPL and its backup: | |
47 | ||
48 | nand write.raw.noverify 0x43000000 0 40 | |
49 | nand write.raw.noverify 0x43000000 0x400000 40 | |
50 | ||
51 | And finally write the U-Boot binary: | |
52 | nand write 0x4a000000 0x800000 0xc0000 | |
53 | ||
54 | You can now reboot and enjoy your NAND. |