mirror of
https://github.com/plctlab/riscv-operating-system-mooc.git
synced 2025-11-16 12:34:47 +00:00
32 lines
798 B
ArmAsm
32 lines
798 B
ArmAsm
#include "platform.h"
|
|
|
|
.equ STACK_SIZE, 8192
|
|
|
|
.global _start
|
|
|
|
.text
|
|
_start:
|
|
# park harts with id != 0
|
|
csrr t0, mhartid # read current hart id
|
|
mv tp, t0 # keep CPU's hartid in its tp for later usage.
|
|
bnez t0, park # if we're not on the hart 0
|
|
# we park the hart
|
|
# Setup stacks, the stack grows from bottom to top, so we put the
|
|
# stack pointer to the very end of the stack range.
|
|
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
|
|
|
|
j start_kernel # hart 0 jump to c
|
|
|
|
park:
|
|
wfi
|
|
j park
|
|
|
|
stacks:
|
|
.skip STACK_SIZE * MAXNUM_CPU # allocate space for the harts stacks
|
|
|
|
.end # End of file
|