This image type is supposed to ignore the load address. But at present
it fails if the load address is missing. If it is zero, the image is
loaded at address 0, which may not work on all boards.

Make use of the kernel_addr_r environment variable, instead, since this
seems to be a more reliable final address for the kernel.

Another option would be to create a new Kconfig for this, or to use a
region of memory known to be free, e.g. calculated from the DRAM banks.
But in any case we should try to avoid conflicting with the
kernel_addr_r variable. So the approach in this patch seems reasonable
to me.

Signed-off-by: Simon Glass <s...@chromium.org>
---

(no changes since v1)

 boot/bootm.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/boot/bootm.c b/boot/bootm.c
index cb61485c226c..7583be5a4515 100644
--- a/boot/bootm.c
+++ b/boot/bootm.c
@@ -176,7 +176,13 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, 
int argc,
 
                images.os.end = fit_get_end(images.fit_hdr_os);
 
-               if (fit_image_get_load(images.fit_hdr_os, images.fit_noffset_os,
+               if (images.os.type == IH_TYPE_KERNEL_NOLOAD) {
+                       ulong load;
+
+                       load = env_get_hex("kernel_addr_r", -1UL);
+                       printf("Using kernel load address %lx\n", load);
+                       images.os.load = load;
+               } else if (fit_image_get_load(images.fit_hdr_os, 
images.fit_noffset_os,
                                       &images.os.load)) {
                        puts("Can't get image load address!\n");
                        bootstage_error(BOOTSTAGE_ID_FIT_LOADADDR);
@@ -229,7 +235,7 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, 
int argc,
 
                ret = fit_image_get_entry(images.fit_hdr_os,
                                          images.fit_noffset_os, &images.ep);
-               if (ret) {
+               if (ret && images.os.type == IH_TYPE_KERNEL_NOLOAD) {
                        puts("Can't get entry point property!\n");
                        return 1;
                }
-- 
2.42.0.869.gea05f2083d-goog

Reply via email to