|
@@ -374,6 +374,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
|
|
|
ulong cmd_start, cmd_end;
|
|
|
ulong initrd_high;
|
|
|
ulong data;
|
|
|
+ int initrd_copy_to_ram = 1;
|
|
|
char *cmdline;
|
|
|
char *s;
|
|
|
bd_t *kbd;
|
|
@@ -385,6 +386,8 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
|
|
|
* turning the "load high" feature off. This is intentional.
|
|
|
*/
|
|
|
initrd_high = simple_strtoul(s, NULL, 16);
|
|
|
+ if (initrd_high == ~0)
|
|
|
+ initrd_copy_to_ram = 0;
|
|
|
} else { /* not set, no restrictions to load high */
|
|
|
initrd_high = ~0;
|
|
|
}
|
|
@@ -567,6 +570,10 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
|
|
|
}
|
|
|
|
|
|
if (data) {
|
|
|
+ if (!initrd_copy_to_ram) { /* zero-copy ramdisk support */
|
|
|
+ initrd_start = data;
|
|
|
+ initrd_end = initrd_start + len;
|
|
|
+ } else {
|
|
|
initrd_start = (ulong)kbd - len;
|
|
|
initrd_start &= ~(4096 - 1); /* align on page */
|
|
|
|
|
@@ -621,6 +628,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
|
|
|
memmove ((void *)initrd_start, (void *)data, len);
|
|
|
#endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */
|
|
|
printf ("OK\n");
|
|
|
+ }
|
|
|
} else {
|
|
|
initrd_start = 0;
|
|
|
initrd_end = 0;
|