aboutsummaryrefslogtreecommitdiff
path: root/common/spl
diff options
context:
space:
mode:
authorDario Binacchi2020-05-27 13:56:20 +0200
committerTom Rini2020-07-08 17:21:46 -0400
commit9f6a14c47ff95354185248ea6e7b1c695e64939e (patch)
tree980cba335253d0a47cdc06246d2f82cc18214ca8 /common/spl
parent585b468a8c73df0445e994443a39869697fc53a8 (diff)
spl: fit: nand: fix fit loading in case of bad blocks
The offset at which the image to be loaded from NAND is located is retrieved from the itb header. The presence of bad blocks in the area of the NAND where the itb image is located could invalidate the offset which must therefore be adjusted taking into account the state of the sectors concerned. cc: Michael Trimarchi <michael@amarulasolutions.com> Signed-off-by: Dario Binacchi <dariobin@libero.it> Reviewed-by: Michael Trimarchi <michael@amarulasolutions.com>
Diffstat (limited to 'common/spl')
-rw-r--r--common/spl/spl_nand.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c
index 48c97549eb9..1e6f2dce569 100644
--- a/common/spl/spl_nand.c
+++ b/common/spl/spl_nand.c
@@ -42,8 +42,11 @@ static int spl_nand_load_image(struct spl_image_info *spl_image,
static ulong spl_nand_fit_read(struct spl_load_info *load, ulong offs,
ulong size, void *dst)
{
+ ulong sector;
int ret;
+ sector = *(int *)load->priv;
+ offs = sector + nand_spl_adjust_offset(sector, offs - sector);
ret = nand_spl_load_image(offs, size, dst);
if (!ret)
return size;
@@ -66,7 +69,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image,
debug("Found FIT\n");
load.dev = NULL;
- load.priv = NULL;
+ load.priv = &offset;
load.filename = NULL;
load.bl_len = 1;
load.read = spl_nand_fit_read;