aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86/boot/boot.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/boot/boot.c')
-rw-r--r--src/arch/x86/boot/boot.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/arch/x86/boot/boot.c b/src/arch/x86/boot/boot.c
index d5365842d2..08fabcfb4f 100644
--- a/src/arch/x86/boot/boot.c
+++ b/src/arch/x86/boot/boot.c
@@ -123,18 +123,22 @@ static void jmp_payload(void *entry, unsigned long buffer, unsigned long size)
);
}
-void arch_payload_run(struct payload *payload)
+static void try_payload(struct prog *prog)
{
- if (IS_ENABLED(CONFIG_RELOCATABLE_RAMSTAGE))
- jmp_payload_no_bounce_buffer(prog_entry(&payload->prog));
- else
- jmp_payload(prog_entry(&payload->prog),
- (uintptr_t)payload->bounce.data,
- payload->bounce.size);
+ if (prog->type == PROG_PAYLOAD) {
+ if (IS_ENABLED(CONFIG_RELOCATABLE_RAMSTAGE))
+ jmp_payload_no_bounce_buffer(prog_entry(prog));
+ else
+ jmp_payload(prog_entry(prog),
+ (uintptr_t)prog_start(prog),
+ prog_size(prog));
+ }
}
void arch_prog_run(struct prog *prog)
{
+ if (ENV_RAMSTAGE)
+ try_payload(prog);
__asm__ volatile (
"jmp *%%edi\n"
:: "D"(prog_entry(prog))