Skip to content
Snippets Groups Projects
Commit 38b99261 authored by Wolfgang Denk's avatar Wolfgang Denk
Browse files

Add zero-copy ramdisk support (requires corresponding kernel support!)

parent 4c3b21a5
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
Changes since U-Boot 0.3.1: Changes since U-Boot 0.3.1:
====================================================================== ======================================================================
* Add zero-copy ramdisk support (requires corresponding kernel support!)
* Patch by Kyle Harris, 20 May 2003: * Patch by Kyle Harris, 20 May 2003:
In preparation for an ixp port, rename cpu/xscale and arch-xscale In preparation for an ixp port, rename cpu/xscale and arch-xscale
into cpu/pxa and arch-pxa. into cpu/pxa and arch-pxa.
......
...@@ -1988,6 +1988,14 @@ Some configuration options can be set using Environment Variables: ...@@ -1988,6 +1988,14 @@ Some configuration options can be set using Environment Variables:
setenv initrd_high 00c00000 setenv initrd_high 00c00000
If you set initrd_high to 0xFFFFFFFF, this is an
indication to U-Boot that all addresses are legal
for the Linux kernel, including addresses in flash
memory. In this case U-Boot will NOT COPY the
ramdisk at all. This may be useful to reduce the
boot time on your system, but requires that this
feature is supported by your Linux kernel.
ipaddr - IP address; needed for tftpboot command ipaddr - IP address; needed for tftpboot command
loadaddr - Default load address for commands like "bootp", loadaddr - Default load address for commands like "bootp",
......
...@@ -374,6 +374,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, ...@@ -374,6 +374,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
ulong cmd_start, cmd_end; ulong cmd_start, cmd_end;
ulong initrd_high; ulong initrd_high;
ulong data; ulong data;
int initrd_copy_to_ram = 1;
char *cmdline; char *cmdline;
char *s; char *s;
bd_t *kbd; bd_t *kbd;
...@@ -385,6 +386,8 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, ...@@ -385,6 +386,8 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
* turning the "load high" feature off. This is intentional. * turning the "load high" feature off. This is intentional.
*/ */
initrd_high = simple_strtoul(s, NULL, 16); initrd_high = simple_strtoul(s, NULL, 16);
if (initrd_high == ~0)
initrd_copy_to_ram = 0;
} else { /* not set, no restrictions to load high */ } else { /* not set, no restrictions to load high */
initrd_high = ~0; initrd_high = ~0;
} }
...@@ -567,6 +570,10 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, ...@@ -567,6 +570,10 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
} }
if (data) { 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 = (ulong)kbd - len;
initrd_start &= ~(4096 - 1); /* align on page */ initrd_start &= ~(4096 - 1); /* align on page */
...@@ -621,6 +628,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, ...@@ -621,6 +628,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
memmove ((void *)initrd_start, (void *)data, len); memmove ((void *)initrd_start, (void *)data, len);
#endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ #endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */
printf ("OK\n"); printf ("OK\n");
}
} else { } else {
initrd_start = 0; initrd_start = 0;
initrd_end = 0; initrd_end = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment