From: Vitaly Wool <vitaly.wool@konsulko.com>
Date: Tue, 6 Apr 2021 07:50:16 +0000 (+0300)
Subject: riscv: booti: do not force relocation if force_reloc is not set
X-Git-Tag: v2025.01-rc5-pxa1908~1787^2~3
X-Git-Url: http://git.dujemihanovic.xyz/%22http:/kyber.dk/phpMyBuilder/static/%7B%7B?a=commitdiff_plain;h=6ba8eeb6f17c08a7a7fd97683161330d01a8ef2e;p=u-boot.git

riscv: booti: do not force relocation if force_reloc is not set

If force_reloc flag is not set and booti is called for an address
ouside RAM (i. e. QSPI NOR flash), we should honor that and not try
to force relocation in a bogus fashion.

Signed-off-by: Vitaly Wool <vitaly.wool@konsulko.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
---

diff --git a/arch/riscv/lib/image.c b/arch/riscv/lib/image.c
index 47f2edcf7f..a65a5b8d17 100644
--- a/arch/riscv/lib/image.c
+++ b/arch/riscv/lib/image.c
@@ -50,7 +50,12 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
 		return -EINVAL;
 	}
 	*size = lhdr->image_size;
-	*relocated_addr = gd->ram_base + lhdr->text_offset;
+	if (force_reloc ||
+	   (gd->ram_base <= image && image < gd->ram_base + gd->ram_size)) {
+		*relocated_addr = gd->ram_base + lhdr->text_offset;
+	} else {
+		*relocated_addr = image;
+	}
 
 	unmap_sysmem(lhdr);