diff options
Diffstat (limited to 'arch/powerpc/lib/bootm.c')
| -rw-r--r-- | arch/powerpc/lib/bootm.c | 24 | 
1 files changed, 15 insertions, 9 deletions
diff --git a/arch/powerpc/lib/bootm.c b/arch/powerpc/lib/bootm.c index 116d81bec..e01787dcb 100644 --- a/arch/powerpc/lib/bootm.c +++ b/arch/powerpc/lib/bootm.c @@ -33,6 +33,7 @@  #include <bzlib.h>  #include <environment.h>  #include <asm/byteorder.h> +#include <asm/mp.h>  #if defined(CONFIG_OF_LIBFDT)  #include <fdt.h> @@ -95,7 +96,7 @@ static void boot_jump_linux(bootm_headers_t *images)  		debug ("   Booting using OF flat tree...\n");  		WATCHDOG_RESET ();  		(*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC, -			   CONFIG_SYS_BOOTMAPSZ, 0, 0); +			   getenv_bootm_mapsize(), 0, 0);  		/* does not return */  	} else  #endif @@ -166,6 +167,10 @@ void arch_lmb_reserve(struct lmb *lmb)  	sp -= 4096;  	lmb_reserve(lmb, sp, (CONFIG_SYS_SDRAM_BASE + get_effective_memsize() - sp)); +#ifdef CONFIG_MP +	cpu_mp_lmb_reserve(lmb); +#endif +  	return ;  } @@ -181,7 +186,6 @@ static void boot_prep_linux(void)  static int boot_cmdline_linux(bootm_headers_t *images)  { -	ulong bootmap_base = getenv_bootm_low();  	ulong of_size = images->ft_len;  	struct lmb *lmb = &images->lmb;  	ulong *cmd_start = &images->cmdline_start; @@ -191,7 +195,7 @@ static int boot_cmdline_linux(bootm_headers_t *images)  	if (!of_size) {  		/* allocate space and init command line */ -		ret = boot_get_cmdline (lmb, cmd_start, cmd_end, bootmap_base); +		ret = boot_get_cmdline (lmb, cmd_start, cmd_end);  		if (ret) {  			puts("ERROR with allocation of cmdline\n");  			return ret; @@ -203,7 +207,6 @@ static int boot_cmdline_linux(bootm_headers_t *images)  static int boot_bd_t_linux(bootm_headers_t *images)  { -	ulong bootmap_base = getenv_bootm_low();  	ulong of_size = images->ft_len;  	struct lmb *lmb = &images->lmb;  	bd_t **kbd = &images->kbd; @@ -212,7 +215,7 @@ static int boot_bd_t_linux(bootm_headers_t *images)  	if (!of_size) {  		/* allocate space for kernel copy of board info */ -		ret = boot_get_kbd (lmb, kbd, bootmap_base); +		ret = boot_get_kbd (lmb, kbd);  		if (ret) {  			puts("ERROR with allocation of kernel bd\n");  			return ret; @@ -230,13 +233,16 @@ static int boot_body_linux(bootm_headers_t *images)  	ulong *initrd_start = &images->initrd_start;  	ulong *initrd_end = &images->initrd_end;  #if defined(CONFIG_OF_LIBFDT) -	ulong bootmap_base = getenv_bootm_low();  	ulong of_size = images->ft_len;  	char **of_flat_tree = &images->ft_addr;  #endif  	int ret; +#if defined(CONFIG_OF_LIBFDT) +	boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree); +#endif +  	/* allocate space and init command line */  	ret = boot_cmdline_linux(images);  	if (ret) @@ -252,8 +258,8 @@ static int boot_body_linux(bootm_headers_t *images)  	if (ret)  		return ret; -#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_SYS_BOOTMAPSZ) -	ret = boot_relocate_fdt(lmb, bootmap_base, of_flat_tree, &of_size); +#if defined(CONFIG_OF_LIBFDT) +	ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size);  	if (ret)  		return ret; @@ -291,7 +297,7 @@ static int boot_body_linux(bootm_headers_t *images)  		if (*initrd_start && *initrd_end)  			fdt_initrd(*of_flat_tree, *initrd_start, *initrd_end, 1);  	} -#endif	/* CONFIG_OF_LIBFDT && CONFIG_SYS_BOOTMAPSZ */ +#endif	/* CONFIG_OF_LIBFDT */  	return 0;  }  |