@ -87,28 +87,12 @@ struct fsp_header *__attribute__((optimize("O0"))) find_fsp_header(void)
return ( struct fsp_header * ) fsp ;
}
void fsp_continue ( struct shared_data * shared_data , u32 status , void * hob_list )
void fsp_continue ( u32 status , void * hob_list )
{
u32 stack_len ;
u32 stack_base ;
u32 stack_top ;
post_code ( POST_MRC ) ;
assert ( status = = 0 ) ;
/* Get the migrated stack in normal memory */
stack_base = ( u32 ) fsp_get_bootloader_tmp_mem ( hob_list , & stack_len ) ;
assert ( stack_base ! = 0 ) ;
stack_top = stack_base + stack_len - sizeof ( u32 ) ;
/*
* Old stack base is stored at the very end of the stack top ,
* use it to calculate the migrated shared data base
*/
shared_data = ( struct shared_data * ) ( stack_base +
( ( u32 ) shared_data - * ( u32 * ) stack_top ) ) ;
/* The boot loader main function entry */
fsp_init_done ( hob_list ) ;
}
@ -176,19 +160,18 @@ void fsp_init(u32 stack_top, u32 boot_mode, void *nvs_buf)
setup_fsp_gdt ( ) ;
/*
* Use ASM code to ensure the register value in EAX & EC X
* will be passed into BlContinuationFunc
* Use ASM code to ensure the register value in EAX & ED X
* will be passed into fsp_continue
*/
asm volatile (
" pushl %0; "
" call *%%eax; "
" .global asm_continuation; "
" asm_continuation:; "
" movl %%ebx, %%eax; " /* shared_data */
" movl 4(%%esp), %%edx; " /* status */
" movl 8(%%esp), %%ecx; " /* hob_list */
" movl 4(%%esp), %%eax; " /* status */
" movl 8(%%esp), %%edx; " /* hob_list */
" jmp fsp_continue; "
: : " m " ( params_ptr ) , " a " ( init ) , " b " ( & shared_data )
: : " m " ( params_ptr ) , " a " ( init )
) ;
/*