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