|
@@ -133,6 +133,10 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
ulong img_addr;
|
|
|
ulong os_data, os_len;
|
|
|
|
|
|
+ ulong image_start, image_end;
|
|
|
+ ulong load_start, load_end;
|
|
|
+
|
|
|
+
|
|
|
if (argc < 2) {
|
|
|
img_addr = load_addr;
|
|
|
} else {
|
|
@@ -234,6 +238,11 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
dcache_disable();
|
|
|
#endif
|
|
|
|
|
|
+ image_start = (ulong)hdr;
|
|
|
+ image_end = image_get_image_end (hdr);
|
|
|
+ load_start = image_get_load (hdr);
|
|
|
+ load_end = 0;
|
|
|
+
|
|
|
switch (image_get_comp (hdr)) {
|
|
|
case IH_COMP_NONE:
|
|
|
if (image_get_load (hdr) == img_addr) {
|
|
@@ -244,6 +253,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
memmove_wd ((void *)image_get_load (hdr),
|
|
|
(void *)os_data, os_len, CHUNKSZ);
|
|
|
|
|
|
+ load_end = load_start + os_len;
|
|
|
puts("OK\n");
|
|
|
}
|
|
|
break;
|
|
@@ -255,6 +265,8 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
show_boot_progress (-6);
|
|
|
do_reset (cmdtp, flag, argc, argv);
|
|
|
}
|
|
|
+
|
|
|
+ load_end = load_start + os_len;
|
|
|
break;
|
|
|
#ifdef CONFIG_BZIP2
|
|
|
case IH_COMP_BZIP2:
|
|
@@ -272,6 +284,8 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
show_boot_progress (-6);
|
|
|
do_reset (cmdtp, flag, argc, argv);
|
|
|
}
|
|
|
+
|
|
|
+ load_end = load_start + unc_len;
|
|
|
break;
|
|
|
#endif /* CONFIG_BZIP2 */
|
|
|
default:
|
|
@@ -284,6 +298,14 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
|
puts ("OK\n");
|
|
|
show_boot_progress (7);
|
|
|
|
|
|
+ if ((load_start < image_end) && (load_end > image_start)) {
|
|
|
+ debug ("image_start = 0x%lX, image_end = 0x%lx\n", image_start, image_end);
|
|
|
+ debug ("load_start = 0x%lx, load_end = 0x%lx\n", load_start, load_end);
|
|
|
+
|
|
|
+ puts ("ERROR: image overwritten - must RESET the board to recover.\n");
|
|
|
+ do_reset (cmdtp, flag, argc, argv);
|
|
|
+ }
|
|
|
+
|
|
|
switch (image_get_type (hdr)) {
|
|
|
case IH_TYPE_STANDALONE:
|
|
|
if (iflag)
|