[U-Boot] [PATCH 15/15] sunxi_nand_spl: Add support for backup boot partitions

Ian Campbell ijc at hellion.org.uk
Mon Aug 17 10:34:14 CEST 2015


On Sat, 2015-08-15 at 22:02 +0200, Hans de Goede wrote:
> The BROM does not care / use bad page markings, instead it deals with
> any bad pages in the first erase-block by simply trying to load "boot0"
> from the first next erase-block.


           "first/next"? Maybe, or maybe s/first //?

> This commit implements the same strategy for the sunxi spl nand code,
> allowing it to boot from the backup boot partition when the main boot
> partition is bad (tested by erasing the main boot partition).
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>

Acked-by: Ian Campbell <ijc at hellion.org.uk>

> ---
>  drivers/mtd/nand/sunxi_nand_spl.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/drivers/mtd/nand/sunxi_nand_spl.c 
> b/drivers/mtd/nand/sunxi_nand_spl.c
> index 5687cd8..a75e674 100644
> --- a/drivers/mtd/nand/sunxi_nand_spl.c
> +++ b/drivers/mtd/nand/sunxi_nand_spl.c
> @@ -348,6 +348,23 @@ static int nand_read_buffer(uint32_t offs, 
> unsigned int size, void *dest,
>  
>  int nand_spl_load_image(uint32_t offs, unsigned int size, void 
> *dest)
>  {
> +	const uint32_t boot_offsets[] = {
> +		0 * 1024 * 1024 + CONFIG_SYS_NAND_U_BOOT_OFFS,
> +		1 * 1024 * 1024 + CONFIG_SYS_NAND_U_BOOT_OFFS,
> +		2 * 1024 * 1024 + CONFIG_SYS_NAND_U_BOOT_OFFS,
> +		4 * 1024 * 1024 + CONFIG_SYS_NAND_U_BOOT_OFFS,
> +	};
> +	int i;
> +
> +	if (offs == CONFIG_SYS_NAND_U_BOOT_OFFS) {
> +		for (i = 0; i < ARRAY_SIZE(boot_offsets); i++) {
> +			if (nand_read_buffer(boot_offsets[i], size,
> +					     dest, 1) == 0)
> +				return 0;
> +		}
> +		return -1;
> +	}
> +
>  	return nand_read_buffer(offs, size, dest, 1);
>  }
>  


More information about the U-Boot mailing list