diff options
Diffstat (limited to 'common/board_f.c')
| -rw-r--r-- | common/board_f.c | 51 | 
1 files changed, 42 insertions, 9 deletions
| diff --git a/common/board_f.c b/common/board_f.c index 00ca81126..204505519 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -49,9 +49,11 @@  #include <mpc5xxx.h>  #endif +#include <os.h>  #include <post.h>  #include <spi.h>  #include <watchdog.h> +#include <asm/errno.h>  #include <asm/io.h>  #ifdef CONFIG_MP  #include <asm/mp.h> @@ -61,6 +63,9 @@  #include <asm/init_helpers.h>  #include <asm/relocate.h>  #endif +#ifdef CONFIG_SANDBOX +#include <asm/state.h> +#endif  #include <linux/compiler.h>  /* @@ -155,6 +160,7 @@ static int init_baud_rate(void)  static int display_text_info(void)  { +#ifndef CONFIG_SANDBOX  	ulong bss_start, bss_end;  #ifdef CONFIG_SYS_SYM_OFFSETS @@ -166,6 +172,7 @@ static int display_text_info(void)  #endif  	debug("U-Boot code: %08X -> %08lX  BSS: -> %08lX\n",  	      CONFIG_SYS_TEXT_BASE, bss_start, bss_end); +#endif  #ifdef CONFIG_MODEM_SUPPORT  	debug("Modem Support enabled\n"); @@ -284,6 +291,8 @@ static int setup_mon_len(void)  {  #ifdef CONFIG_SYS_SYM_OFFSETS  	gd->mon_len = _bss_end_ofs; +#elif defined(CONFIG_SANDBOX) +	gd->mon_len = (ulong)&_end - (ulong)_init;  #else  	/* TODO: use (ulong)&__bss_end - (ulong)&__text_start; ? */  	gd->mon_len = (ulong)&__bss_end - CONFIG_SYS_MONITOR_BASE; @@ -296,6 +305,17 @@ __weak int arch_cpu_init(void)  	return 0;  } +#ifdef CONFIG_SANDBOX +static int setup_ram_buf(void) +{ +	gd->arch.ram_buf = os_malloc(CONFIG_SYS_SDRAM_SIZE); +	assert(gd->arch.ram_buf); +	gd->ram_size = CONFIG_SYS_SDRAM_SIZE; + +	return 0; +} +#endif +  static int setup_fdt(void)  {  #ifdef CONFIG_OF_EMBED @@ -470,7 +490,7 @@ static int reserve_malloc(void)  static int reserve_board(void)  {  	gd->dest_addr_sp -= sizeof(bd_t); -	gd->bd = (bd_t *)gd->dest_addr_sp; +	gd->bd = (bd_t *)map_sysmem(gd->dest_addr_sp, sizeof(bd_t));  	memset(gd->bd, '\0', sizeof(bd_t));  	debug("Reserving %zu Bytes for Board Info at: %08lx\n",  			sizeof(bd_t), gd->dest_addr_sp); @@ -489,7 +509,7 @@ static int setup_machine(void)  static int reserve_global_data(void)  {  	gd->dest_addr_sp -= sizeof(gd_t); -	gd->new_gd = (gd_t *)gd->dest_addr_sp; +	gd->new_gd = (gd_t *)map_sysmem(gd->dest_addr_sp, sizeof(gd_t));  	debug("Reserving %zu Bytes for Global Data at: %08lx\n",  			sizeof(gd_t), gd->dest_addr_sp);  	return 0; @@ -506,9 +526,9 @@ static int reserve_fdt(void)  		gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob) + 0x1000, 32);  		gd->dest_addr_sp -= gd->fdt_size; -		gd->new_fdt = (void *)gd->dest_addr_sp; -		debug("Reserving %lu Bytes for FDT at: %p\n", -		      gd->fdt_size, gd->new_fdt); +		gd->new_fdt = map_sysmem(gd->dest_addr_sp, gd->fdt_size); +		debug("Reserving %lu Bytes for FDT at: %08lx\n", +		      gd->fdt_size, gd->dest_addr_sp);  	}  	return 0; @@ -709,8 +729,9 @@ static int setup_reloc(void)  	memcpy(gd->new_gd, (char *)gd, sizeof(gd_t));  	debug("Relocation Offset is: %08lx\n", gd->reloc_off); -	debug("Relocating to %08lx, new gd at %p, sp at %08lx\n", -	      gd->dest_addr, gd->new_gd, gd->dest_addr_sp); +	debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n", +	      gd->dest_addr, (ulong)map_to_sysmem(gd->new_gd), +	      gd->dest_addr_sp);  	return 0;  } @@ -736,6 +757,8 @@ static int jump_to_copy(void)  	 * (CPU cache)  	 */  	board_init_f_r_trampoline(gd->start_addr_sp); +#elif defined(CONFIG_SANDBOX) +	board_init_r(gd->new_gd, 0);  #else  	relocate_code(gd->dest_addr_sp, gd->new_gd, gd->dest_addr);  #endif @@ -758,6 +781,9 @@ static init_fnc_t init_sequence_f[] = {  		!defined(CONFIG_MPC86xx) && !defined(CONFIG_X86)  	zero_global_data,  #endif +#ifdef CONFIG_SANDBOX +	setup_ram_buf, +#endif  	setup_fdt,  	setup_mon_len,  #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) @@ -816,8 +842,11 @@ static init_fnc_t init_sequence_f[] = {  	init_baud_rate,		/* initialze baudrate settings */  	serial_init,		/* serial communications setup */  	console_init_f,		/* stage 1 init of console */ -#if defined(CONFIG_X86) && defined(CONFIG_OF_CONTROL) -	prepare_fdt,		/* TODO(sjg@chromium.org): remove */ +#ifdef CONFIG_SANDBOX +	sandbox_early_getopt_check, +#endif +#ifdef CONFIG_OF_CONTROL +	fdtdec_prepare_fdt,  #endif  	display_options,	/* say that we are here */  	display_text_info,	/* show debugging info if required */ @@ -1007,5 +1036,9 @@ void board_init_f_r(void)  void hang(void)  {  	puts("### ERROR ### Please RESET the board ###\n"); +#ifdef CONFIG_SANDBOX +	os_exit(0); +#else  	for (;;); +#endif  } |