summaryrefslogtreecommitdiff
path: root/payloads/libpayload/arch/arm/selfboot.c
diff options
context:
space:
mode:
authorHung-Te Lin <hungte@chromium.org>2014-05-13 22:33:12 +0800
committerMarc Jones <marc.jones@se-eng.com>2014-12-30 19:41:40 +0100
commit6f98fc30fdef746a5637e6d0c55ee36c27b0b892 (patch)
tree50c1ee9a0c795ad3a2ae96f277db4233f8c1560e /payloads/libpayload/arch/arm/selfboot.c
parent1a3675ec02e1fc8607d8c293121f280ab1e1a67c (diff)
downloadcoreboot-6f98fc30fdef746a5637e6d0c55ee36c27b0b892.tar.xz
libpayload: Provide selfboot function.
The calling convention of payload entry function is different by architecture. For example, X86 takes no arguments and ARM needs first param to be a cb_header_ptr*. To help payloads load and execute other payloads easily and correctly, we should provide the selfboot() function in libpayload, using same prototype as defined in coreboot environment. BUG=none TEST=emerge-nyan libpayload # pass BRANCH=none Original-Change-Id: I8f1cb2c0df788794b2f6f7f5500a3910328a4f84 Original-Signed-off-by: Hung-Te Lin <hungte@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/199503 Original-Reviewed-by: Stefan Reinauer <reinauer@chromium.org> (cherry picked from commit 1e916cf021ce68886eb9668982c392eadedc7b7e) Signed-off-by: Marc Jones <marc.jones@se-eng.com> Change-Id: I7279ef27f49ef581d25a455dd8f1f2f7f1ba58cb Reviewed-on: http://review.coreboot.org/7907 Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Tested-by: build bot (Jenkins)
Diffstat (limited to 'payloads/libpayload/arch/arm/selfboot.c')
-rw-r--r--payloads/libpayload/arch/arm/selfboot.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/payloads/libpayload/arch/arm/selfboot.c b/payloads/libpayload/arch/arm/selfboot.c
new file mode 100644
index 0000000000..cbb7ef1b51
--- /dev/null
+++ b/payloads/libpayload/arch/arm/selfboot.c
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but without any warranty; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <libpayload.h>
+
+extern void *cb_header_ptr;
+
+void selfboot(void *entry)
+{
+ __asm__ __volatile__(
+ "mov r0, %[cb_header_ptr]\n"
+ "bx %[entry]\n"
+ :: [cb_header_ptr]"r"(cb_header_ptr), [entry]"r"(entry)
+ : "r0"
+ );
+}