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:
Bin Meng 2015-12-10 22:02:56 -08:00
parent fa85e826c1
commit aa02446406
2 changed files with 7 additions and 26 deletions

View File

@ -49,14 +49,12 @@ void fsp_init_done(void *hob_list);
/** /**
* FSP Continuation function * FSP Continuation function
* *
* @shared_data: Shared data base before stack migration
* @status: Always 0 * @status: Always 0
* @hob_list: HOB list pointer * @hob_list: HOB list pointer
* *
* @retval: Never returns * @retval: Never returns
*/ */
void fsp_continue(struct shared_data *shared_data, u32 status, void fsp_continue(u32 status, void *hob_list);
void *hob_list);
/** /**
* Find FSP header offset in FSP image * Find FSP header offset in FSP image

View File

@ -87,28 +87,12 @@ struct fsp_header *__attribute__((optimize("O0"))) find_fsp_header(void)
return (struct fsp_header *)fsp; 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); post_code(POST_MRC);
assert(status == 0); 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 */ /* The boot loader main function entry */
fsp_init_done(hob_list); fsp_init_done(hob_list);
} }
@ -176,19 +160,18 @@ void fsp_init(u32 stack_top, u32 boot_mode, void *nvs_buf)
setup_fsp_gdt(); setup_fsp_gdt();
/* /*
* Use ASM code to ensure the register value in EAX & ECX * Use ASM code to ensure the register value in EAX & EDX
* will be passed into BlContinuationFunc * will be passed into fsp_continue
*/ */
asm volatile ( asm volatile (
"pushl %0;" "pushl %0;"
"call *%%eax;" "call *%%eax;"
".global asm_continuation;" ".global asm_continuation;"
"asm_continuation:;" "asm_continuation:;"
"movl %%ebx, %%eax;" /* shared_data */ "movl 4(%%esp), %%eax;" /* status */
"movl 4(%%esp), %%edx;" /* status */ "movl 8(%%esp), %%edx;" /* hob_list */
"movl 8(%%esp), %%ecx;" /* hob_list */
"jmp fsp_continue;" "jmp fsp_continue;"
: : "m"(params_ptr), "a"(init), "b"(&shared_data) : : "m"(params_ptr), "a"(init)
); );
/* /*