summaryrefslogtreecommitdiff
path: root/lume-legacy/src/boot
diff options
context:
space:
mode:
Diffstat (limited to 'lume-legacy/src/boot')
-rw-r--r--lume-legacy/src/boot/entry.S47
1 files changed, 47 insertions, 0 deletions
diff --git a/lume-legacy/src/boot/entry.S b/lume-legacy/src/boot/entry.S
new file mode 100644
index 0000000..8910ddc
--- /dev/null
+++ b/lume-legacy/src/boot/entry.S
@@ -0,0 +1,47 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (C) 2026 Richard Qin
+
+.section .text.entry
+.global _start
+
+_start:
+ mv tp, a0
+
+ la t0, stack_base
+ li t1, 4096
+ addi t2, a0, 1
+ mul t1, t1, t2
+ add sp, t0, t1
+
+ bnez a0, .L_jump_main
+
+ la t0, sbss
+ la t1, ebss
+.L_clear_bss:
+ bge t0, t1, .L_save_dtb
+ sd zero, 0(t0)
+ addi t0, t0, 8
+ j .L_clear_bss
+
+.L_save_dtb:
+ la t0, g_dtb_addr
+ sd a1, 0(t0)
+
+.L_jump_main:
+ call kernel_main
+
+.L_park:
+ wfi
+ j .L_park
+
+.section .bss
+.align 4
+.global stack_top
+stack_base:
+ .space 4096 * 8
+stack_top:
+
+.align 8
+.global g_dtb_addr
+g_dtb_addr:
+ .space 8 \ No newline at end of file