@ -21,26 +21,6 @@ int arch_fixup_fdt(void *blob)
return 0 ;
}
# if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined ( CONFIG_CMDLINE_TAG ) | | \
defined ( CONFIG_INITRD_TAG ) | | \
defined ( CONFIG_SERIAL_TAG ) | | \
defined ( CONFIG_REVISION_TAG )
static void setup_start_tag ( bd_t * bd ) ;
# ifdef CONFIG_SETUP_MEMORY_TAGS
static void setup_memory_tags ( bd_t * bd ) ;
# endif
static void setup_commandline_tag ( bd_t * bd , char * commandline ) ;
# ifdef CONFIG_INITRD_TAG
static void setup_initrd_tag ( bd_t * bd , ulong initrd_start , ulong initrd_end ) ;
# endif
static void setup_end_tag ( bd_t * bd ) ;
static struct tag * params ;
# endif /* CONFIG_SETUP_MEMORY_TAGS || CONFIG_CMDLINE_TAG || CONFIG_INITRD_TAG */
int do_bootm_linux ( int flag , int argc , char * argv [ ] , bootm_headers_t * images )
{
bd_t * bd = gd - > bd ;
@ -48,10 +28,6 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
int machid = bd - > bi_arch_number ;
void ( * theKernel ) ( int arch , uint params ) ;
# ifdef CONFIG_CMDLINE_TAG
char * commandline = env_get ( " bootargs " ) ;
# endif
/*
* allow the PREP bootm subcommand , it is required for bootm to work
*/
@ -82,167 +58,16 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
hang ( ) ;
}
# endif
} else if ( BOOTM_ENABLE_TAGS ) {
# if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined ( CONFIG_CMDLINE_TAG ) | | \
defined ( CONFIG_INITRD_TAG ) | | \
defined ( CONFIG_SERIAL_TAG ) | | \
defined ( CONFIG_REVISION_TAG )
setup_start_tag ( bd ) ;
# ifdef CONFIG_SERIAL_TAG
setup_serial_tag ( & params ) ;
# endif
# ifdef CONFIG_REVISION_TAG
setup_revision_tag ( & params ) ;
# endif
# ifdef CONFIG_SETUP_MEMORY_TAGS
setup_memory_tags ( bd ) ;
# endif
# ifdef CONFIG_CMDLINE_TAG
setup_commandline_tag ( bd , commandline ) ;
# endif
# ifdef CONFIG_INITRD_TAG
if ( images - > rd_start & & images - > rd_end )
setup_initrd_tag ( bd , images - > rd_start , images - > rd_end ) ;
# endif
setup_end_tag ( bd ) ;
# endif
}
/* we assume that the kernel is in place */
printf ( " \n Starting kernel ... \n \n " ) ;
# ifdef CONFIG_USB_DEVICE
{
extern void udc_disconnect ( void ) ;
udc_disconnect ( ) ;
}
# endif
}
cleanup_before_linux ( ) ;
if ( IMAGE_ENABLE_OF_LIBFDT & & images - > ft_len )
theKernel ( machid , ( unsigned long ) images - > ft_addr ) ;
else
theKernel ( machid , bd - > bi_boot_params ) ;
/* does not return */
return 1 ;
}
# if defined(CONFIG_SETUP_MEMORY_TAGS) || \
defined ( CONFIG_CMDLINE_TAG ) | | \
defined ( CONFIG_INITRD_TAG ) | | \
defined ( CONFIG_SERIAL_TAG ) | | \
defined ( CONFIG_REVISION_TAG )
static void setup_start_tag ( bd_t * bd )
{
params = ( struct tag * ) bd - > bi_boot_params ;
params - > hdr . tag = ATAG_CORE ;
params - > hdr . size = tag_size ( tag_core ) ;
params - > u . core . flags = 0 ;
params - > u . core . pagesize = 0 ;
params - > u . core . rootdev = 0 ;
params = tag_next ( params ) ;
}
# ifdef CONFIG_SETUP_MEMORY_TAGS
static void setup_memory_tags ( bd_t * bd )
{
int i ;
for ( i = 0 ; i < CONFIG_NR_DRAM_BANKS ; i + + ) {
params - > hdr . tag = ATAG_MEM ;
params - > hdr . size = tag_size ( tag_mem32 ) ;
params - > u . mem . start = bd - > bi_dram [ i ] . start ;
params - > u . mem . size = bd - > bi_dram [ i ] . size ;
params = tag_next ( params ) ;
}
}
# endif /* CONFIG_SETUP_MEMORY_TAGS */
static void setup_commandline_tag ( bd_t * bd , char * commandline )
{
char * p ;
if ( ! commandline )
return ;
/* eat leading white space */
for ( p = commandline ; * p = = ' ' ; p + + )
;
/* skip non-existent command lines so the kernel will still
* use its default command line .
*/
if ( * p = = ' \0 ' )
return ;
params - > hdr . tag = ATAG_CMDLINE ;
params - > hdr . size =
( sizeof ( struct tag_header ) + strlen ( p ) + 1 + 4 ) > > 2 ;
strcpy ( params - > u . cmdline . cmdline , p )
;
params = tag_next ( params ) ;
}
# ifdef CONFIG_INITRD_TAG
static void setup_initrd_tag ( bd_t * bd , ulong initrd_start , ulong initrd_end )
{
/* an ATAG_INITRD node tells the kernel where the compressed
* ramdisk can be found . ATAG_RDIMG is a better name , actually .
*/
params - > hdr . tag = ATAG_INITRD2 ;
params - > hdr . size = tag_size ( tag_initrd ) ;
params - > u . initrd . start = initrd_start ;
params - > u . initrd . size = initrd_end - initrd_start ;
params = tag_next ( params ) ;
}
# endif /* CONFIG_INITRD_TAG */
# ifdef CONFIG_SERIAL_TAG
void setup_serial_tag ( struct tag * * tmp )
{
void get_board_serial ( struct tag_serialnr * serialnr ) ;
struct tag * params ;
struct tag_serialnr serialnr ;
params = * tmp ;
get_board_serial ( & serialnr ) ;
params - > hdr . tag = ATAG_SERIAL ;
params - > hdr . size = tag_size ( tag_serialnr ) ;
params - > u . serialnr . low = serialnr . low ;
params - > u . serialnr . high = serialnr . high ;
params = tag_next ( params ) ;
* tmp = params ;
}
# endif
# ifdef CONFIG_REVISION_TAG
void setup_revision_tag ( struct tag * * in_params )
{
u32 get_board_rev ( void ) ;
u32 rev ;
rev = get_board_rev ( ) ;
params - > hdr . tag = ATAG_REVISION ;
params - > hdr . size = tag_size ( tag_revision ) ;
params - > u . revision . rev = rev ;
params = tag_next ( params ) ;
}
# endif /* CONFIG_REVISION_TAG */
static void setup_end_tag ( bd_t * bd )
{
params - > hdr . tag = ATAG_NONE ;
params - > hdr . size = 0 ;
}
# endif /* CONFIG_SETUP_MEMORY_TAGS || CONFIG_CMDLINE_TAG || CONFIG_INITRD_TAG */