summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/include/arch/stages.h8
-rw-r--r--src/arch/x86/lib/cbfs_and_run.c5
-rw-r--r--src/vendorcode/google/chromeos/vboot_loader.c7
3 files changed, 11 insertions, 9 deletions
diff --git a/src/arch/x86/include/arch/stages.h b/src/arch/x86/include/arch/stages.h
index 8cbf5da34a..91d0db6957 100644
--- a/src/arch/x86/include/arch/stages.h
+++ b/src/arch/x86/include/arch/stages.h
@@ -24,4 +24,12 @@
void asmlinkage copy_and_run(void);
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
diff --git a/src/arch/x86/lib/cbfs_and_run.c b/src/arch/x86/lib/cbfs_and_run.c
index 6379842563..3d56e19318 100644
--- a/src/arch/x86/lib/cbfs_and_run.c
+++ b/src/arch/x86/lib/cbfs_and_run.c
@@ -34,10 +34,7 @@ static void cbfs_and_run_core(const char *filename)
timestamp_add_now(TS_END_COPYRAM);
print_debug("Jumping to image.\n");
- __asm__ volatile (
- "jmp *%%edi\n"
- :: "D"(dst)
- );
+ stage_exit(dst);
}
void asmlinkage copy_and_run(void)
diff --git a/src/vendorcode/google/chromeos/vboot_loader.c b/src/vendorcode/google/chromeos/vboot_loader.c
index badff2794f..cc7c25d873 100644
--- a/src/vendorcode/google/chromeos/vboot_loader.c
+++ b/src/vendorcode/google/chromeos/vboot_loader.c
@@ -17,6 +17,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <arch/stages.h>
#include <stdint.h>
#include <stddef.h>
#include <cbfs.h>
@@ -180,11 +181,7 @@ static void vboot_load_ramstage(struct vboot_handoff *vboot_handoff,
timestamp_add_now(TS_END_COPYRAM);
- __asm__ volatile (
- "movl $0, %%ebp\n"
- "jmp *%%edi\n"
- :: "D"(rmod_load.entry)
- );
+ stage_exit(rmod_load.entry);
}
void vboot_verify_firmware(struct romstage_handoff *handoff)