coreboot: introduce arch_payload_run()

The selfboot() function relied on global variables
within the selfboot.c compilation unit. Now that the
bounce buffer is a part of struct payload use a new
architecture-specific arch_payload_run() function
for jumping to the payload. selfboot() can then be
removed.

Change-Id: Icec74942e94599542148561b3311ce5096ac5ea5
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5300
Tested-by: build bot (Jenkins)
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
diff --git a/src/arch/x86/boot/boot.c b/src/arch/x86/boot/boot.c
index 3ef46a5..29070a0 100644
--- a/src/arch/x86/boot/boot.c
+++ b/src/arch/x86/boot/boot.c
@@ -1,12 +1,12 @@
 #include <console/console.h>
 #include <arch/stages.h>
+#include <payload_loader.h>
 #include <ip_checksum.h>
 #include <string.h>
 
-#if CONFIG_RELOCATABLE_RAMSTAGE
 /* When the ramstage is relocatable the elf loading ensures an elf image cannot
  * be loaded over the ramstage code. */
-void jmp_to_elf_entry(void *entry, unsigned long unused1, unsigned long unused2)
+static void jmp_payload_no_bounce_buffer(void *entry)
 {
 	/* Jump to kernel */
 	__asm__ __volatile__(
@@ -22,8 +22,8 @@
 		"r" (entry)
 		);
 }
-#else
-void jmp_to_elf_entry(void *entry, unsigned long buffer, unsigned long size)
+
+static void jmp_payload(void *entry, unsigned long buffer, unsigned long size)
 {
 	extern unsigned char _ram_seg, _eram_seg;
 	unsigned long lb_start, lb_size;
@@ -122,6 +122,12 @@
 		"ri"(0), "ri" (0)
 		);
 }
-#endif /* CONFIG_RELOCATABLE_RAMSTAGE */
 
-
+void arch_payload_run(const struct payload *payload)
+{
+	if (IS_ENABLED(CONFIG_RELOCATABLE_RAMSTAGE))
+		jmp_payload_no_bounce_buffer(payload->entry);
+	else
+		jmp_payload(payload->entry, (uintptr_t)payload->bounce.data,
+				payload->bounce.size);
+}