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 <hdego...@redhat.com>

Acked-by: Ian Campbell <i...@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);
>  }
>  
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to