@ -1,5 +1,5 @@
/*
* ( C ) Copyright 2005
* ( C ) Copyright 2005 - 2008
* Matthias Fuchs , esd GmbH Germany , matthias . fuchs @ esd - electronics . com
*
* See file CREDITS for list of people who contributed to this
@ -23,6 +23,9 @@
# include <common.h>
# include <command.h>
# if !defined(CONFIG_440)
# include <asm/4xx_pci.h>
# endif
# if defined(CONFIG_CMD_BSP)
@ -36,18 +39,24 @@ extern int do_autoscript (cmd_tbl_t *, int, int, char *[]);
*/
int do_loadpci ( cmd_tbl_t * cmdtp , int flag , int argc , char * argv [ ] )
{
unsigned int * ptr = 0 ;
u32 * ptr = 0 ;
int count = 0 ;
int count2 = 0 ;
char addr [ 16 ] ;
char str [ ] = " \\ |/- " ;
char * local_args [ 2 ] ;
u32 la , ptm1la ;
# if defined(CONFIG_440)
ptm1la = in32r ( PCIX0_PTM1LA ) ;
# else
ptm1la = in32r ( PTM1LA ) ;
# endif
while ( 1 ) {
/*
* Mark sync address
*/
ptr = 0 ;
ptr = ( u32 * ) ptm1la ;
memset ( ptr , 0 , 0x20 ) ;
* ptr = 0xffffffff ;
@ -74,7 +83,8 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
printf ( " \n Got bootcode %08x: " , * ptr ) ;
sprintf ( addr , " %08x " , * ptr & ADDRMASK ) ;
la = ptm1la + ( * ptr & ADDRMASK ) ;
sprintf ( addr , " %08x " , la ) ;
switch ( * ptr & ~ ADDRMASK ) {
case 0 :
@ -83,8 +93,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
*/
printf ( " booting image at addr 0x%s ... \n " , addr ) ;
setenv ( " loadaddr " , addr ) ;
do_bootm ( cmdtp , 0 , 0 , NULL ) ;
do_bootm ( cmdtp , 0 , 0 , NULL ) ;
break ;
case 1 :
@ -92,7 +101,6 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
* Boot image via autoscr
*/
printf ( " executing script at addr 0x%s ... \n " , addr ) ;
local_args [ 0 ] = addr ;
local_args [ 1 ] = NULL ;
do_autoscript ( cmdtp , 0 , 1 , local_args ) ;
@ -103,7 +111,7 @@ int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
* Call run_cmd
*/
printf ( " running command at addr 0x%s ... \n " , addr ) ;
run_command ( ( char * ) ( * ptr & ADDRMASK ) , 0 ) ;
run_command ( ( char * ) la , 0 ) ;
break ;
default :