summaryrefslogtreecommitdiff
path: root/src/lib/loaders
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2014-02-24 21:24:28 -0600
committerAaron Durbin <adurbin@google.com>2014-03-03 19:49:40 +0100
commit1322d7f9d58f355f469ab7b993f7da5b6117edb6 (patch)
tree04cf717efc134f054237cfc438feccdaa1aa325a /src/lib/loaders
parentbdf913ab010c99db8e64845f5b5837c9008609dc (diff)
coreboot: move common code to payload_run() from selfboot()
The selfboot() routine was perfoming most of the common teardown and stack checking infrastructure. Move that code into payload_run() to prepare removal of the selfboot() function. Change-Id: I29f2a5cfcc692f7a0fe2656cb1cda18158c49c6e Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/5297 Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Diffstat (limited to 'src/lib/loaders')
-rw-r--r--src/lib/loaders/load_and_run_payload.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/lib/loaders/load_and_run_payload.c b/src/lib/loaders/load_and_run_payload.c
index 46db93c719..96f5e27580 100644
--- a/src/lib/loaders/load_and_run_payload.c
+++ b/src/lib/loaders/load_and_run_payload.c
@@ -21,7 +21,10 @@
#include <stdlib.h>
#include <console/console.h>
#include <boot/coreboot_tables.h>
+#include <fallback.h>
+#include <lib.h>
#include <payload_loader.h>
+#include <timestamp.h>
extern const struct payload_loader_ops vboot_payload_loader;
extern const struct payload_loader_ops cbfs_payload_loader;
@@ -77,5 +80,18 @@ void payload_run(const struct payload *payload)
if (payload == NULL)
return;
+ /* Reset to booting from this image as late as possible */
+ boot_successful();
+
+ printk(BIOS_DEBUG, "Jumping to boot code at %p\n", payload->entry);
+ post_code(POST_ENTER_ELF_BOOT);
+
+ timestamp_add_now(TS_SELFBOOT_JUMP);
+
+ /* Before we go off to run the payload, see if
+ * we stayed within our bounds.
+ */
+ checkstack(_estack, 0);
+
selfboot(payload->entry);
}