diff options
| -rw-r--r-- | CHANGELOG | 2 | ||||
| -rw-r--r-- | README | 8 | ||||
| -rw-r--r-- | common/cmd_bootm.c | 8 | 
3 files changed, 18 insertions, 0 deletions
| @@ -2,6 +2,8 @@  Changes since U-Boot 0.3.1:  ====================================================================== +* Add zero-copy ramdisk support (requires corresponding kernel support!) +  * Patch by Kyle Harris, 20 May 2003:    In preparation for an ixp port, rename cpu/xscale and arch-xscale    into cpu/pxa and arch-pxa. @@ -1988,6 +1988,14 @@ Some configuration options can be set using Environment Variables:  		  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    loadaddr	- Default load address for commands like "bootp", diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index fa32d467e..af62becf4 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -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; |