@ -17,6 +17,7 @@
# include <malloc.h>
# include <dm/root.h>
# include <linux/compiler.h>
# include <fdt_support.h>
DECLARE_GLOBAL_DATA_PTR ;
@ -56,6 +57,14 @@ __weak int spl_start_uboot(void)
return 1 ;
}
/* weak default platform specific function to initialize
* dram banks
*/
__weak int dram_init_banksize ( void )
{
return 0 ;
}
/*
* Weak default function for arch specific zImage check . Return zero
* and fill start and end address if image is recognized .
@ -66,6 +75,33 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end)
}
# endif
void spl_fixup_fdt ( void )
{
# if defined(CONFIG_SPL_OF_LIBFDT) && defined(CONFIG_SYS_SPL_ARGS_ADDR)
void * fdt_blob = ( void * ) CONFIG_SYS_SPL_ARGS_ADDR ;
int err ;
err = fdt_check_header ( fdt_blob ) ;
if ( err < 0 ) {
printf ( " fdt_root: %s \n " , fdt_strerror ( err ) ) ;
return ;
}
/* fixup the memory dt node */
err = fdt_shrink_to_minimum ( fdt_blob , 0 ) ;
if ( err = = 0 ) {
printf ( " spl: fdt_shrink_to_minimum err - %d \n " , err ) ;
return ;
}
err = arch_fixup_fdt ( fdt_blob ) ;
if ( err ) {
printf ( " spl: arch_fixup_fdt err - %d \n " , err ) ;
return ;
}
# endif
}
/*
* Weak default function for board specific cleanup / preparation before
* Linux boot . Some boards / platforms might not need it , so just provide
@ -323,6 +359,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
debug ( " >>spl:board_init_r() \n " ) ;
gd - > bd = & bdata ;
# ifdef CONFIG_SPL_OS_BOOT
dram_init_banksize ( ) ;
# endif
# if defined(CONFIG_SYS_SPL_MALLOC_START)
mem_malloc_init ( CONFIG_SYS_SPL_MALLOC_START ,
@ -364,6 +403,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
# ifdef CONFIG_SPL_OS_BOOT
case IH_OS_LINUX :
debug ( " Jumping to Linux \n " ) ;
spl_fixup_fdt ( ) ;
spl_board_prepare_for_linux ( ) ;
jump_to_image_linux ( & spl_image ) ;
# endif