@ -15,37 +15,51 @@ void spl_nor_load_image(void)
*/
spl_image . flags | = SPL_COPY_PAYLOAD_ONLY ;
if ( spl_start_uboot ( ) ) {
/*
* Load real U - Boot from its location in NOR flash to its
* defined location in SDRAM
*/
spl_parse_image_header (
( const struct image_header * ) CONFIG_SYS_UBOOT_BASE ) ;
# ifdef CONFIG_SPL_OS_BOOT
if ( ! spl_start_uboot ( ) ) {
struct image_header * header ;
memcpy ( ( void * ) spl_image . load_addr ,
( void * ) ( CONFIG_SYS_UBOOT_BASE +
sizeof ( struct image_header ) ) ,
spl_image . size ) ;
} else {
/*
* Load Linux from its location in NOR flash to its defined
* location in SDRAM
*/
spl_parse_image_header (
( const struct image_header * ) CONFIG_SYS_OS_BASE ) ;
header = ( const struct image_header * ) CONFIG_SYS_OS_BASE ;
memcpy ( ( void * ) spl_image . load_addr ,
( void * ) ( CONFIG_SYS_OS_BASE +
sizeof ( struct image_header ) ) ,
spl_image . size ) ;
if ( image_get_os ( header ) = = IH_OS_LINUX ) {
/* happy - was a Linux */
/*
* Copy DT blob ( fdt ) to SDRAM . Passing pointer to flash
* doesn ' t work ( 16 KiB should be enough for DT )
*/
memcpy ( ( void * ) CONFIG_SYS_SPL_ARGS_ADDR ,
( void * ) ( CONFIG_SYS_FDT_BASE ) ,
( 16 < < 10 ) ) ;
spl_parse_image_header ( header ) ;
memcpy ( ( void * ) spl_image . load_addr ,
( void * ) ( CONFIG_SYS_OS_BASE +
sizeof ( struct image_header ) ) ,
spl_image . size ) ;
/*
* Copy DT blob ( fdt ) to SDRAM . Passing pointer to
* flash doesn ' t work ( 16 KiB should be enough for DT )
*/
memcpy ( ( void * ) CONFIG_SYS_SPL_ARGS_ADDR ,
( void * ) ( CONFIG_SYS_FDT_BASE ) ,
( 16 < < 10 ) ) ;
return ;
} else {
puts ( " The Expected Linux image was not found. \n "
" Please check your NOR configuration. \n "
" Trying to start u-boot now... \n " ) ;
}
}
# endif
/*
* Load real U - Boot from its location in NOR flash to its
* defined location in SDRAM
*/
spl_parse_image_header (
( const struct image_header * ) CONFIG_SYS_UBOOT_BASE ) ;
memcpy ( ( void * ) spl_image . load_addr ,
( void * ) ( CONFIG_SYS_UBOOT_BASE + sizeof ( struct image_header ) ) ,
spl_image . size ) ;
}