summaryrefslogtreecommitdiff
path: root/arch/riscv/purgatory/entry.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv/purgatory/entry.S')
-rw-r--r--arch/riscv/purgatory/entry.S39
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/riscv/purgatory/entry.S b/arch/riscv/purgatory/entry.S
new file mode 100644
index 000000000000..5bcf3af903da
--- /dev/null
+++ b/arch/riscv/purgatory/entry.S
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * purgatory: Runs between two kernels
+ *
+ * Copyright (C) 2022 Huawei Technologies Co, Ltd.
+ *
+ * Author: Li Zhengyu (lizhengyu3@huawei.com)
+ *
+ */
+#include <linux/linkage.h>
+
+.text
+
+SYM_CODE_START(purgatory_start)
+
+ lla sp, .Lstack
+ mv s0, a0 /* The hartid of the current hart */
+ mv s1, a1 /* Phys address of the FDT image */
+
+ jal purgatory
+
+ /* Start new image. */
+ mv a0, s0
+ mv a1, s1
+ ld a2, riscv_kernel_entry
+ jr a2
+SYM_CODE_END(purgatory_start)
+
+.align 4
+ .rept 256
+ .quad 0
+ .endr
+.Lstack:
+
+.data
+
+SYM_DATA(riscv_kernel_entry, .quad 0)
+
+.end