On Tue, 22 Nov 2016 13:38:31 +0100
Maxime Ripard <maxime.rip...@free-electrons.com> wrote:

> When trying to autodetect the ECC and randomization configurations, the
> driver starts with a randomization disabled and no seeds.
> 
> In this case, the number of seeds is obviously 0, and the randomize boolean
> is set to false.
> 
> However, the logic that retrieves the seed for a given page offset will
> blindly use the number of seeds, without testing if the randomization is
> enabled, basically doing a modulo by 0.
> 
> As it turns out, the libgcc in the common toolchain returns 0 here, which
> was our expected value in such a case, and why we would not detect it.
> However, U-Boot's libgcc will for some reason return from the function
> instead, resulting in an error to load the U-Boot binary in the SPL.
> 
> Signed-off-by: Maxime Ripard <maxime.rip...@free-electrons.com>

Acked-by: Boris Brezillon <boris.brezil...@free-electrons.com>

> ---
>  drivers/mtd/nand/sunxi_nand_spl.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mtd/nand/sunxi_nand_spl.c 
> b/drivers/mtd/nand/sunxi_nand_spl.c
> index 1ef7366d4c42..eed4472bdc34 100644
> --- a/drivers/mtd/nand/sunxi_nand_spl.c
> +++ b/drivers/mtd/nand/sunxi_nand_spl.c
> @@ -245,7 +245,7 @@ static int nand_read_page(const struct nfc_config *conf, 
> u32 offs,
>  {
>       dma_addr_t dst = (dma_addr_t)dest;
>       int nsectors = len / conf->ecc_size;
> -     u16 rand_seed;
> +     u16 rand_seed = 0;
>       u32 val;
>       int page;
>  
> @@ -258,8 +258,9 @@ static int nand_read_page(const struct nfc_config *conf, 
> u32 offs,
>       /* clear ecc status */
>       writel(0, SUNXI_NFC_BASE + NFC_ECC_ST);
>  
> -     /* Choose correct seed */
> -     rand_seed = random_seed[page % conf->nseeds];
> +     /* Choose correct seed if randomized */
> +     if (conf->randomize)
> +             rand_seed = random_seed[page % conf->nseeds];
>  
>       writel((rand_seed << 16) | (conf->ecc_strength << 12) |
>               (conf->randomize ? NFC_ECC_RANDOM_EN : 0) |

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to