aboutsummaryrefslogtreecommitdiff
path: root/pk/mentry.S
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2016-03-03 11:57:21 -0800
committerAndrew Waterman <waterman@cs.berkeley.edu>2016-03-03 11:57:21 -0800
commit3dd00b900cf087b0f39d2626c957b228cafed52a (patch)
tree6c97d6fc4aacb9ce869d760a88fd57a739690c99 /pk/mentry.S
parent802f0cf1b573bd3aea052d822cba40d1c63b3f2e (diff)
downloadpk-3dd00b900cf087b0f39d2626c957b228cafed52a.zip
pk-3dd00b900cf087b0f39d2626c957b228cafed52a.tar.gz
pk-3dd00b900cf087b0f39d2626c957b228cafed52a.tar.bz2
Simplify boot code
Diffstat (limited to 'pk/mentry.S')
-rw-r--r--pk/mentry.S30
1 files changed, 8 insertions, 22 deletions
diff --git a/pk/mentry.S b/pk/mentry.S
index b8e9136..ee3a146 100644
--- a/pk/mentry.S
+++ b/pk/mentry.S
@@ -222,37 +222,23 @@ do_reset:
li x31, 0
csrw mscratch, x0
- csrr a0, mhartid
- bnez a0, .LmultiHart
-
# sp <- end of first full page after the end of the binary
la sp, _end + 2*RISCV_PGSIZE - 1
li t0, -RISCV_PGSIZE
and sp, sp, t0
addi sp, sp, -MENTRY_FRAME_SIZE
- j init_first_hart
+ csrr a0, mhartid
+ slli a1, a0, RISCV_PGSHIFT
+ add sp, sp, a1
+
+ beqz a0, init_first_hart
.LmultiHart:
#if MAX_HARTS > 1
# make sure our hart id is within a valid range
li a1, MAX_HARTS
- bgeu a0, a1, .LmultiHart
-
- # signal we're ready to boot
- li a1, 1
- sll a1, a1, a0
- la a2, booted_harts_mask
- amoor.w x0, a1, (a2)
-
- # wait for main hart to grant us a stack
-1:csrrw sp, mscratch, x0
- beqz sp, 1b
-
- j init_other_hart
-#else
- j .LmultiHart
+ bltu a0, a1, init_other_hart
+ wfi
#endif
-
- # XXX depend on sbi_base to force its linkage
- la x0, sbi_base
+ j .LmultiHart