arch/x86: Always compile postcar library in romstage
postcar_loader.c has a useful library of funtions for setting up stack and MTRRs. Make it available in romstage irrespective of CONFIG_POSTCAR_STAGE for use in stack setup after Dram init. The final step of moving the used and max MTRRs on to stack is moved to a new function, that can be used outside of postcar phase. Change-Id: I322b12577d74268d03fe42a9744648763693cddd Signed-off-by: Rizwan Qureshi <rizwan.qureshi@intel.com> Reviewed-on: https://review.coreboot.org/16331 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
d2e92e461d
commit
b1b44d34e3
|
@ -213,7 +213,7 @@ romstage-y += memcpy.c
|
|||
romstage-y += memmove.c
|
||||
romstage-y += memset.c
|
||||
romstage-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
|
||||
romstage-$(CONFIG_POSTCAR_STAGE) += postcar_loader.c
|
||||
romstage-y += postcar_loader.c
|
||||
romstage-$(CONFIG_COLLECT_TIMESTAMPS) += timestamp.c
|
||||
|
||||
ifneq ($(CONFIG_ROMCC),y)
|
||||
|
|
|
@ -273,6 +273,12 @@ int postcar_frame_init(struct postcar_frame *pcf, size_t stack_size);
|
|||
void postcar_frame_add_mtrr(struct postcar_frame *pcf,
|
||||
uintptr_t addr, size_t size, int type);
|
||||
|
||||
/*
|
||||
* Push used MTRR and Max MTRRs on to the stack
|
||||
* and return pointer to stack top.
|
||||
*/
|
||||
void *postcar_commit_mtrrs(struct postcar_frame *pcf);
|
||||
|
||||
/*
|
||||
* Load and run a program that takes control of execution that
|
||||
* tears down CAR and loads ramstage. The postcar_frame object
|
||||
|
|
|
@ -84,6 +84,17 @@ void postcar_frame_add_mtrr(struct postcar_frame *pcf,
|
|||
pcf->num_var_mttrs++;
|
||||
}
|
||||
|
||||
void *postcar_commit_mtrrs(struct postcar_frame *pcf)
|
||||
{
|
||||
/*
|
||||
* Place the number of used variable MTRRs on stack then max number
|
||||
* of variable MTRRs supported in the system.
|
||||
*/
|
||||
stack_push(pcf, pcf->num_var_mttrs);
|
||||
stack_push(pcf, pcf->max_var_mttrs);
|
||||
return (void *) pcf->stack;
|
||||
}
|
||||
|
||||
void run_postcar_phase(struct postcar_frame *pcf)
|
||||
{
|
||||
struct prog prog =
|
||||
|
@ -93,12 +104,7 @@ void run_postcar_phase(struct postcar_frame *pcf)
|
|||
.prog = &prog,
|
||||
};
|
||||
|
||||
/*
|
||||
* Place the number of used variable MTRRs on stack then max number
|
||||
* of variable MTRRs supported in the system.
|
||||
*/
|
||||
stack_push(pcf, pcf->num_var_mttrs);
|
||||
stack_push(pcf, pcf->max_var_mttrs);
|
||||
postcar_commit_mtrrs(pcf);
|
||||
|
||||
if (prog_locate(&prog))
|
||||
die("Failed to locate after CAR program.\n");
|
||||
|
|
Loading…
Reference in New Issue