riscv: Consolidate fences into AMOs for available_harts_lock

We can reduce the number of instructions needed to use available_harts_lock
by using the aq and rl suffixes for AMOs.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Rick Chen <rick@andestech.com>
This commit is contained in:
Sean Anderson 2020-09-21 07:51:39 -04:00 committed by Andes
parent 768502e2a7
commit 309995b315

View File

@ -125,14 +125,12 @@ call_board_init_f_0:
#ifndef CONFIG_XIP #ifndef CONFIG_XIP
la t0, available_harts_lock la t0, available_harts_lock
fence rw, w amoswap.w.rl zero, zero, 0(t0)
amoswap.w zero, zero, 0(t0)
wait_for_gd_init: wait_for_gd_init:
la t0, available_harts_lock la t0, available_harts_lock
li t1, 1 li t1, 1
1: amoswap.w t1, t1, 0(t0) 1: amoswap.w.aq t1, t1, 0(t0)
fence r, rw
bnez t1, 1b bnez t1, 1b
/* register available harts in the available_harts mask */ /* register available harts in the available_harts mask */
@ -142,8 +140,7 @@ wait_for_gd_init:
or t2, t2, t1 or t2, t2, t1
SREG t2, GD_AVAILABLE_HARTS(gp) SREG t2, GD_AVAILABLE_HARTS(gp)
fence rw, w amoswap.w.rl zero, zero, 0(t0)
amoswap.w zero, zero, 0(t0)
/* /*
* Continue on hart lottery winner, others branch to * Continue on hart lottery winner, others branch to