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 47f2edc..a65a5b8d 100644
--- a/arch/riscv/lib/image.c
+++ b/arch/riscv/lib/image.c
@@ -50,7 +50,12 @@
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);