mirror of
https://github.com/cccriscv/mini-riscv-os.git
synced 2025-11-16 04:24:33 +00:00
27 lines
859 B
ArmAsm
27 lines
859 B
ArmAsm
.equ STACK_SIZE, 8192
|
|
|
|
.global _start
|
|
|
|
_start:
|
|
# setup stacks per hart
|
|
csrr t0, mhartid # read current hart id
|
|
slli t0, t0, 10 # shift left the hart id by 1024
|
|
la sp, stacks + STACK_SIZE # set the initial stack pointer
|
|
# to the end of the stack space
|
|
add sp, sp, t0 # move the current hart stack pointer
|
|
# to its place in the stack space
|
|
|
|
# park harts with id != 0
|
|
csrr a0, mhartid # read current hart id
|
|
bnez a0, park # if we're not on the hart 0
|
|
# we park the hart
|
|
|
|
j os_main # hart 0 jump to c
|
|
|
|
park:
|
|
wfi
|
|
j park
|
|
|
|
stacks:
|
|
.skip STACK_SIZE * 4 # allocate space for the harts stacks
|