|
@@ -272,7 +272,13 @@ static int bootm_start(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+ if (images.os.type == IH_TYPE_KERNEL_NOLOAD) {
|
|
|
+ images.os.load = images.os.image_start;
|
|
|
+ images.ep += images.os.load;
|
|
|
+ }
|
|
|
+
|
|
|
if (((images.os.type == IH_TYPE_KERNEL) ||
|
|
|
+ (images.os.type == IH_TYPE_KERNEL_NOLOAD) ||
|
|
|
(images.os.type == IH_TYPE_MULTI)) &&
|
|
|
(images.os.os == IH_OS_LINUX)) {
|
|
|
/* find ramdisk */
|
|
@@ -314,6 +320,7 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
|
|
|
ulong image_start = os.image_start;
|
|
|
ulong image_len = os.image_len;
|
|
|
__maybe_unused uint unc_len = CONFIG_SYS_BOOTM_LEN;
|
|
|
+ int no_overlap = 0;
|
|
|
#if defined(CONFIG_LZMA) || defined(CONFIG_LZO)
|
|
|
int ret;
|
|
|
#endif /* defined(CONFIG_LZMA) || defined(CONFIG_LZO) */
|
|
@@ -324,6 +331,7 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
|
|
|
case IH_COMP_NONE:
|
|
|
if (load == blob_start || load == image_start) {
|
|
|
printf(" XIP %s ... ", type_name);
|
|
|
+ no_overlap = 1;
|
|
|
} else {
|
|
|
printf(" Loading %s ... ", type_name);
|
|
|
memmove_wd((void *)load, (void *)image_start,
|
|
@@ -418,7 +426,7 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
|
|
|
if (boot_progress)
|
|
|
show_boot_progress(7);
|
|
|
|
|
|
- if ((load < blob_end) && (*load_end > blob_start)) {
|
|
|
+ if (!no_overlap && (load < blob_end) && (*load_end > blob_start)) {
|
|
|
debug("images.os.start = 0x%lX, images.os.end = 0x%lx\n",
|
|
|
blob_start, blob_end);
|
|
|
debug("images.os.load = 0x%lx, load_end = 0x%lx\n", load,
|
|
@@ -796,7 +804,8 @@ static int fit_check_kernel(const void *fit, int os_noffset, int verify)
|
|
|
}
|
|
|
|
|
|
show_boot_progress(106);
|
|
|
- if (!fit_image_check_type(fit, os_noffset, IH_TYPE_KERNEL)) {
|
|
|
+ if (!fit_image_check_type(fit, os_noffset, IH_TYPE_KERNEL) &&
|
|
|
+ !fit_image_check_type(fit, os_noffset, IH_TYPE_KERNEL_NOLOAD)) {
|
|
|
puts("Not a kernel image\n");
|
|
|
show_boot_progress(-106);
|
|
|
return 0;
|
|
@@ -874,6 +883,7 @@ static void *boot_get_kernel(cmd_tbl_t *cmdtp, int flag, int argc,
|
|
|
/* get os_data and os_len */
|
|
|
switch (image_get_type(hdr)) {
|
|
|
case IH_TYPE_KERNEL:
|
|
|
+ case IH_TYPE_KERNEL_NOLOAD:
|
|
|
*os_data = image_get_data(hdr);
|
|
|
*os_len = image_get_data_size(hdr);
|
|
|
break;
|