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.w...@konsulko.com>
---
 arch/riscv/lib/image.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/riscv/lib/image.c b/arch/riscv/lib/image.c
index 7357d3b07d..2032c2c399 100644
--- a/arch/riscv/lib/image.c
+++ b/arch/riscv/lib/image.c
@@ -48,7 +48,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);
 
-- 
2.29.2

Reply via email to