@ -108,9 +108,6 @@ static boot_os_fn do_bootm_qnxelf;
int do_bootvx ( cmd_tbl_t * cmdtp , int flag , int argc , char * argv [ ] ) ;
int do_bootelf ( cmd_tbl_t * cmdtp , int flag , int argc , char * argv [ ] ) ;
# endif
# if defined(CONFIG_ARTOS) && defined(CONFIG_PPC)
static boot_os_fn do_bootm_artos ;
# endif
ulong load_addr = CFG_LOAD_ADDR ; /* Default Load Address */
static bootm_headers_t images ; /* pointers to os/initrd/fdt images */
@ -455,11 +452,6 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
break ;
# endif
# ifdef CONFIG_ARTOS
case IH_OS_ARTOS :
do_bootm_artos ( 0 , argc , argv , & images ) ;
break ;
# endif
}
show_boot_progress ( - 9 ) ;
@ -1152,94 +1144,3 @@ static int do_bootm_qnxelf(int flag, int argc, char *argv[],
return 1 ;
}
# endif
# if defined(CONFIG_ARTOS) && defined(CONFIG_PPC)
static int do_bootm_artos ( int flag , int argc , char * argv [ ] ,
bootm_headers_t * images )
{
ulong top ;
char * s , * cmdline ;
char * * fwenv , * * ss ;
int i , j , nxt , len , envno , envsz ;
bd_t * kbd ;
void ( * entry ) ( bd_t * bd , char * cmdline , char * * fwenv , ulong top ) ;
# if defined(CONFIG_FIT)
if ( ! images - > legacy_hdr_valid ) {
fit_unsupported_reset ( " ARTOS " ) ;
return 1 ;
}
# endif
/*
* Booting an ARTOS kernel image + application
*/
/* this used to be the top of memory, but was wrong... */
# ifdef CONFIG_PPC
/* get stack pointer */
asm volatile ( " mr %0,1 " : " =r " ( top ) ) ;
# endif
debug ( " ## Current stack ends at 0x%08lX " , top ) ;
top - = 2048 ; /* just to be sure */
if ( top > CFG_BOOTMAPSZ )
top = CFG_BOOTMAPSZ ;
top & = ~ 0xF ;
debug ( " => set upper limit to 0x%08lX \n " , top ) ;
/* first check the artos specific boot args, then the linux args*/
if ( ( s = getenv ( " abootargs " ) ) = = NULL & & ( s = getenv ( " bootargs " ) ) = = NULL )
s = " " ;
/* get length of cmdline, and place it */
len = strlen ( s ) ;
top = ( top - ( len + 1 ) ) & ~ 0xF ;
cmdline = ( char * ) top ;
debug ( " ## cmdline at 0x%08lX " , top ) ;
strcpy ( cmdline , s ) ;
/* copy bdinfo */
top = ( top - sizeof ( bd_t ) ) & ~ 0xF ;
debug ( " ## bd at 0x%08lX " , top ) ;
kbd = ( bd_t * ) top ;
memcpy ( kbd , gd - > bd , sizeof ( bd_t ) ) ;
/* first find number of env entries, and their size */
envno = 0 ;
envsz = 0 ;
for ( i = 0 ; env_get_char ( i ) ! = ' \0 ' ; i = nxt + 1 ) {
for ( nxt = i ; env_get_char ( nxt ) ! = ' \0 ' ; + + nxt )
;
envno + + ;
envsz + = ( nxt - i ) + 1 ; /* plus trailing zero */
}
envno + + ; /* plus the terminating zero */
debug ( " ## %u envvars total size %u " , envno , envsz ) ;
top = ( top - sizeof ( char * * ) * envno ) & ~ 0xF ;
fwenv = ( char * * ) top ;
debug ( " ## fwenv at 0x%08lX " , top ) ;
top = ( top - envsz ) & ~ 0xF ;
s = ( char * ) top ;
ss = fwenv ;
/* now copy them */
for ( i = 0 ; env_get_char ( i ) ! = ' \0 ' ; i = nxt + 1 ) {
for ( nxt = i ; env_get_char ( nxt ) ! = ' \0 ' ; + + nxt )
;
* ss + + = s ;
for ( j = i ; j < nxt ; + + j )
* s + + = env_get_char ( j ) ;
* s + + = ' \0 ' ;
}
* ss + + = NULL ; /* terminate */
entry = ( void ( * ) ( bd_t * , char * , char * * , ulong ) ) images - > ep ;
( * entry ) ( kbd , cmdline , fwenv , top ) ;
return 1 ;
}
# endif