mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-11-30 15:11:43 +01:00
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
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user