summaryrefslogtreecommitdiff
path: root/purgatory/arch/arm64/purgatory-arm64.c
diff options
context:
space:
mode:
Diffstat (limited to 'purgatory/arch/arm64/purgatory-arm64.c')
-rw-r--r--purgatory/arch/arm64/purgatory-arm64.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/purgatory/arch/arm64/purgatory-arm64.c b/purgatory/arch/arm64/purgatory-arm64.c
new file mode 100644
index 0000000..25960c3
--- /dev/null
+++ b/purgatory/arch/arm64/purgatory-arm64.c
@@ -0,0 +1,35 @@
+/*
+ * ARM64 purgatory.
+ */
+
+#include <stdint.h>
+#include <purgatory.h>
+
+/* Symbols set by kexec. */
+
+extern uint32_t *arm64_sink;
+extern void (*arm64_kernel_entry)(uint64_t);
+extern uint64_t arm64_dtb_addr;
+
+void putchar(int ch)
+{
+ if (!arm64_sink)
+ return;
+
+ *arm64_sink = ch;
+
+ if (ch == '\n')
+ *arm64_sink = '\r';
+}
+
+void setup_arch(void)
+{
+ printf("purgatory: kernel_entry: %lx\n",
+ (unsigned long)arm64_kernel_entry);
+ printf("purgatory: dtb: %lx\n", arm64_dtb_addr);
+}
+
+void post_verification_setup_arch(void)
+{
+ arm64_kernel_entry(arm64_dtb_addr);
+}