mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-28 01:22:20 +00:00
scripts: sunxi: Build an raw SPL image
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>
This commit is contained in:
parent
ff93c28265
commit
d2fdcc76e8
3 changed files with 72 additions and 0 deletions
3
Makefile
3
Makefile
|
@ -1345,6 +1345,9 @@ spl/u-boot-spl: tools prepare \
|
||||||
spl/sunxi-spl.bin: spl/u-boot-spl
|
spl/sunxi-spl.bin: spl/u-boot-spl
|
||||||
@:
|
@:
|
||||||
|
|
||||||
|
spl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin
|
||||||
|
@:
|
||||||
|
|
||||||
spl/u-boot-spl.sfp: spl/u-boot-spl
|
spl/u-boot-spl.sfp: spl/u-boot-spl
|
||||||
@:
|
@:
|
||||||
|
|
||||||
|
|
54
board/sunxi/README.nand
Normal file
54
board/sunxi/README.nand
Normal file
|
@ -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.
|
|
@ -179,6 +179,10 @@ endif
|
||||||
|
|
||||||
ifdef CONFIG_ARCH_SUNXI
|
ifdef CONFIG_ARCH_SUNXI
|
||||||
ALL-y += $(obj)/sunxi-spl.bin
|
ALL-y += $(obj)/sunxi-spl.bin
|
||||||
|
|
||||||
|
ifdef CONFIG_NAND_SUNXI
|
||||||
|
ALL-y += $(obj)/sunxi-spl-with-ecc.bin
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_SYS_SOC),"at91")
|
ifeq ($(CONFIG_SYS_SOC),"at91")
|
||||||
|
@ -300,6 +304,17 @@ cmd_mksunxiboot = $(objtree)/tools/mksunxiboot $< $@
|
||||||
$(obj)/sunxi-spl.bin: $(obj)/$(SPL_BIN).bin FORCE
|
$(obj)/sunxi-spl.bin: $(obj)/$(SPL_BIN).bin FORCE
|
||||||
$(call if_changed,mksunxiboot)
|
$(call if_changed,mksunxiboot)
|
||||||
|
|
||||||
|
quiet_cmd_sunxi_spl_image_builder = SUNXI_SPL_IMAGE_BUILDER $@
|
||||||
|
cmd_sunxi_spl_image_builder = $(objtree)/tools/sunxi-spl-image-builder \
|
||||||
|
-c $(CONFIG_NAND_SUNXI_SPL_ECC_STRENGTH)/$(CONFIG_NAND_SUNXI_SPL_ECC_SIZE) \
|
||||||
|
-p $(CONFIG_SYS_NAND_PAGE_SIZE) \
|
||||||
|
-o $(CONFIG_SYS_NAND_OOBSIZE) \
|
||||||
|
-u $(CONFIG_NAND_SUNXI_SPL_USABLE_PAGE_SIZE) \
|
||||||
|
-e $(CONFIG_SYS_NAND_BLOCK_SIZE) \
|
||||||
|
-s -b $< $@
|
||||||
|
$(obj)/sunxi-spl-with-ecc.bin: $(obj)/sunxi-spl.bin
|
||||||
|
$(call if_changed,sunxi_spl_image_builder)
|
||||||
|
|
||||||
# Rule to link u-boot-spl
|
# Rule to link u-boot-spl
|
||||||
# May be overridden by arch/$(ARCH)/config.mk
|
# May be overridden by arch/$(ARCH)/config.mk
|
||||||
quiet_cmd_u-boot-spl ?= LD $@
|
quiet_cmd_u-boot-spl ?= LD $@
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue