54 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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. | 
