x86: provide stage_exit() like arm
The arm architectures have a stage_exit() function which takes a void * pointer as an entry point. Provide the same API for x86. This can make the booting paths less architecture-specific. Change-Id: I4ecfbf32f38f2e3817381b63e1f97e92654c5f97 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/5086 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
parent
efc5841ab4
commit
e9aaa71fb1
|
@ -24,4 +24,12 @@
|
||||||
|
|
||||||
void asmlinkage copy_and_run(void);
|
void asmlinkage copy_and_run(void);
|
||||||
void jmp_to_elf_entry(void *entry, unsigned long buffer, unsigned long size);
|
void jmp_to_elf_entry(void *entry, unsigned long buffer, unsigned long size);
|
||||||
|
|
||||||
|
static inline void stage_exit(void *entry)
|
||||||
|
{
|
||||||
|
__asm__ volatile (
|
||||||
|
"jmp *%%edi\n"
|
||||||
|
:: "D"(entry)
|
||||||
|
);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -34,10 +34,7 @@ static void cbfs_and_run_core(const char *filename)
|
||||||
|
|
||||||
timestamp_add_now(TS_END_COPYRAM);
|
timestamp_add_now(TS_END_COPYRAM);
|
||||||
print_debug("Jumping to image.\n");
|
print_debug("Jumping to image.\n");
|
||||||
__asm__ volatile (
|
stage_exit(dst);
|
||||||
"jmp *%%edi\n"
|
|
||||||
:: "D"(dst)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void asmlinkage copy_and_run(void)
|
void asmlinkage copy_and_run(void)
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <arch/stages.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <cbfs.h>
|
#include <cbfs.h>
|
||||||
|
@ -180,11 +181,7 @@ static void vboot_load_ramstage(struct vboot_handoff *vboot_handoff,
|
||||||
|
|
||||||
timestamp_add_now(TS_END_COPYRAM);
|
timestamp_add_now(TS_END_COPYRAM);
|
||||||
|
|
||||||
__asm__ volatile (
|
stage_exit(rmod_load.entry);
|
||||||
"movl $0, %%ebp\n"
|
|
||||||
"jmp *%%edi\n"
|
|
||||||
:: "D"(rmod_load.entry)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vboot_verify_firmware(struct romstage_handoff *handoff)
|
void vboot_verify_firmware(struct romstage_handoff *handoff)
|
||||||
|
|
Loading…
Reference in New Issue