@ -220,101 +220,19 @@ static int boot_bd_t_linux(bootm_headers_t *images)
return ret ;
}
/*
* Verify the device tree .
*
* This function is called after all device tree fix - ups have been enacted ,
* so that the final device tree can be verified . The definition of " verified "
* is up to the specific implementation . However , it generally means that the
* addresses of some of the devices in the device tree are compared with the
* actual addresses at which U - Boot has placed them .
*
* Returns 1 on success , 0 on failure . If 0 is returned , U - boot will halt the
* boot process .
*/
static int __ft_verify_fdt ( void * fdt )
{
return 1 ;
}
__attribute__ ( ( weak , alias ( " __ft_verify_fdt " ) ) ) int ft_verify_fdt ( void * fdt ) ;
static int boot_body_linux ( bootm_headers_t * images )
{
ulong rd_len ;
struct lmb * lmb = & images - > lmb ;
ulong * initrd_start = & images - > initrd_start ;
ulong * initrd_end = & images - > initrd_end ;
# if defined(CONFIG_OF_LIBFDT)
ulong of_size = images - > ft_len ;
char * * of_flat_tree = & images - > ft_addr ;
# endif
int ret ;
# if defined(CONFIG_OF_LIBFDT)
boot_fdt_add_mem_rsv_regions ( lmb , * of_flat_tree ) ;
# endif
/* allocate space and init command line */
ret = boot_cmdline_linux ( images ) ;
if ( ret )
return ret ;
/* allocate space for kernel copy of board info */
ret = boot_bd_t_linux ( images ) ;
if ( ret )
return ret ;
rd_len = images - > rd_end - images - > rd_start ;
ret = boot_ramdisk_high ( lmb , images - > rd_start , rd_len , initrd_start , initrd_end ) ;
if ( ret )
return ret ;
# if defined(CONFIG_OF_LIBFDT)
ret = boot_relocate_fdt ( lmb , of_flat_tree , & of_size ) ;
ret = image_setup_linux ( images ) ;
if ( ret )
return ret ;
/*
* Add the chosen node if it doesn ' t exist , add the env and bd_t
* if the user wants it ( the logic is in the subroutines ) .
*/
if ( of_size ) {
if ( fdt_chosen ( * of_flat_tree , 1 ) < 0 ) {
puts ( " ERROR: " ) ;
puts ( " /chosen node create failed " ) ;
puts ( " - must RESET the board to recover. \n " ) ;
return - 1 ;
}
# ifdef CONFIG_OF_BOARD_SETUP
/* Call the board-specific fixup routine */
ft_board_setup ( * of_flat_tree , gd - > bd ) ;
# endif
/* Delete the old LMB reservation */
lmb_free ( lmb , ( phys_addr_t ) ( u32 ) * of_flat_tree ,
( phys_size_t ) fdt_totalsize ( * of_flat_tree ) ) ;
ret = fdt_resize ( * of_flat_tree ) ;
if ( ret < 0 )
return ret ;
of_size = ret ;
if ( * initrd_start & & * initrd_end ) {
of_size + = FDT_RAMDISK_OVERHEAD ;
fdt_set_totalsize ( * of_flat_tree , of_size ) ;
}
/* Create a new LMB reservation */
lmb_reserve ( lmb , ( ulong ) * of_flat_tree , of_size ) ;
/* fixup the initrd now that we know where it should be */
if ( * initrd_start & & * initrd_end )
fdt_initrd ( * of_flat_tree , * initrd_start , * initrd_end , 1 ) ;
if ( ! ft_verify_fdt ( * of_flat_tree ) )
return - 1 ;
}
# endif /* CONFIG_OF_LIBFDT */
return 0 ;
}