@ -286,9 +286,16 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
debug ( " image_start = 0x%lX, image_end = 0x%lx \n " , image_start , image_end ) ;
debug ( " load_start = 0x%lx, load_end = 0x%lx \n " , load_start , load_end ) ;
puts ( " ERROR: image overwritten - must RESET the board to recover. \n " ) ;
show_boot_progress ( - 113 ) ;
do_reset ( cmdtp , flag , argc , argv ) ;
if ( images . legacy_hdr_valid ) {
if ( image_get_type ( & images . legacy_hdr_os_copy ) = = IH_TYPE_MULTI )
puts ( " WARNING: legacy format multi component "
" image overwritten \n " ) ;
} else {
puts ( " ERROR: new format image overwritten - "
" must RESET the board to recover \n " ) ;
show_boot_progress ( - 113 ) ;
do_reset ( cmdtp , flag , argc , argv ) ;
}
}
show_boot_progress ( 8 ) ;
@ -533,9 +540,17 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]
show_boot_progress ( - 5 ) ;
return NULL ;
}
/*
* copy image header to allow for image overwrites during kernel
* decompression .
*/
memmove ( & images - > legacy_hdr_os_copy , hdr , sizeof ( image_header_t ) ) ;
/* save pointer to image header */
images - > legacy_hdr_os = hdr ;
images - > legacy_hdr_valid = 1 ;
images - > legacy_hdr_valid = 1 ;
show_boot_progress ( 6 ) ;
break ;
# if defined(CONFIG_FIT)
@ -890,7 +905,7 @@ static void do_bootm_netbsd (cmd_tbl_t *cmdtp, int flag,
* address of the original image header .
*/
os_hdr = NULL ;
if ( image_check_type ( hdr , IH_TYPE_MULTI ) ) {
if ( image_check_type ( & images - > legacy_ hdr_os_copy , IH_TYPE_MULTI ) ) {
image_multi_getimg ( hdr , 1 , & kernel_data , & kernel_len ) ;
if ( kernel_len )
os_hdr = hdr ;
@ -947,7 +962,7 @@ static void do_bootm_lynxkdi (cmd_tbl_t *cmdtp, int flag,
int argc , char * argv [ ] ,
bootm_headers_t * images )
{
image_header_t * hdr = images - > legacy_hdr_os ;
image_header_t * hdr = & images - > legacy_hdr_os_copy ;
# if defined(CONFIG_FIT)
if ( ! images - > legacy_hdr_valid ) {
@ -964,7 +979,7 @@ static void do_bootm_rtems (cmd_tbl_t *cmdtp, int flag,
int argc , char * argv [ ] ,
bootm_headers_t * images )
{
image_header_t * hdr = images - > legacy_hdr_os ;
image_header_t * hdr = & images - > legacy_hdr_os_copy ;
void ( * entry_point ) ( bd_t * ) ;
# if defined(CONFIG_FIT)
@ -994,10 +1009,10 @@ static void do_bootm_vxworks (cmd_tbl_t *cmdtp, int flag,
bootm_headers_t * images )
{
char str [ 80 ] ;
image_header_t * hdr = images - > legacy_hdr_os ;
image_header_t * hdr = & images - > legacy_hdr_os_copy ;
# if defined(CONFIG_FIT)
if ( hdr = = NULL ) {
if ( ! images - > legacy_hdr_valid ) {
fit_unsupported_reset ( " VxWorks " ) ;
do_reset ( cmdtp , flag , argc , argv ) ;
}
@ -1014,7 +1029,7 @@ static void do_bootm_qnxelf(cmd_tbl_t *cmdtp, int flag,
{
char * local_args [ 2 ] ;
char str [ 16 ] ;
image_header_t * hdr = images - > legacy_hdr_os ;
image_header_t * hdr = & images - > legacy_hdr_os_copy ;
# if defined(CONFIG_FIT)
if ( ! images - > legacy_hdr_valid ) {
@ -1041,7 +1056,7 @@ static void do_bootm_artos (cmd_tbl_t *cmdtp, int flag,
int i , j , nxt , len , envno , envsz ;
bd_t * kbd ;
void ( * entry ) ( bd_t * bd , char * cmdline , char * * fwenv , ulong top ) ;
image_header_t * hdr = images - > legacy_hdr_os ;
image_header_t * hdr = & images - > legacy_hdr_os_copy ;
# if defined(CONFIG_FIT)
if ( ! images - > legacy_hdr_valid ) {