浏览代码

Fix test failure caused by bad handling of ramdisk

Commit e3a5bbce broke the FIT image tests by not loading a ramdisk even if
a load address is provided in the FIT. The rationale was that a load address
of 0 should be considered to mean 'do not load'.

Add a new load operation which supports this feature, so that the ramdisk
will be loaded if a non-zero load address is provided.

Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass 10 年之前
父节点
当前提交
fe20a81a68
共有 3 个文件被更改,包括 4 次插入2 次删除
  1. 1 1
      common/image-fit.c
  2. 2 1
      common/image.c
  3. 1 0
      include/image.h

+ 1 - 1
common/image-fit.c

@@ -1656,7 +1656,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
 			bootstage_error(bootstage_id + BOOTSTAGE_SUB_LOAD);
 			return -EBADF;
 		}
-	} else {
+	} else if (load_op != FIT_LOAD_OPTIONAL_NON_ZERO || load) {
 		ulong image_start, image_end;
 		ulong load_end;
 		void *dst;

+ 2 - 1
common/image.c

@@ -966,7 +966,8 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images,
 					&fit_uname_config, arch,
 					IH_TYPE_RAMDISK,
 					BOOTSTAGE_ID_FIT_RD_START,
-					FIT_LOAD_IGNORED, &rd_data, &rd_len);
+					FIT_LOAD_OPTIONAL_NON_ZERO,
+					&rd_data, &rd_len);
 			if (rd_noffset < 0)
 				return 1;
 

+ 1 - 0
include/image.h

@@ -412,6 +412,7 @@ void genimg_print_time(time_t timestamp);
 enum fit_load_op {
 	FIT_LOAD_IGNORED,	/* Ignore load address */
 	FIT_LOAD_OPTIONAL,	/* Can be provided, but optional */
+	FIT_LOAD_OPTIONAL_NON_ZERO,	/* Optional, a value of 0 is ignored */
 	FIT_LOAD_REQUIRED,	/* Must be provided */
 };