x86: fsp: Simplify fsp_continue()
There is no need to pass shared_data to fsp_continue() so we can remove unnecessary codes that simplifies the function a lot. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
fa85e826c1
commit
aa02446406
arch/x86
@ -49,14 +49,12 @@ void fsp_init_done(void *hob_list);
|
||||
/**
|
||||
* FSP Continuation function
|
||||
*
|
||||
* @shared_data: Shared data base before stack migration
|
||||
* @status: Always 0
|
||||
* @hob_list: HOB list pointer
|
||||
*
|
||||
* @retval: Never returns
|
||||
*/
|
||||
void fsp_continue(struct shared_data *shared_data, u32 status,
|
||||
void *hob_list);
|
||||
void fsp_continue(u32 status, void *hob_list);
|
||||
|
||||
/**
|
||||
* Find FSP header offset in FSP image
|
||||
|
@ -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 & ECX
|
||||
* will be passed into BlContinuationFunc
|
||||
* Use ASM code to ensure the register value in EAX & EDX
|
||||
* 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)
|
||||
);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user