|
@@ -57,39 +57,39 @@ _start:
|
|
|
bne a0, a6, _wait_relocate_copy_done
|
|
|
_try_lottery:
|
|
|
/* Jump to relocation wait loop if we don't get relocation lottery */
|
|
|
- la a6, _relocate_lottery
|
|
|
+ lla a6, _relocate_lottery
|
|
|
li a7, 1
|
|
|
amoadd.w a6, a7, (a6)
|
|
|
bnez a6, _wait_relocate_copy_done
|
|
|
|
|
|
/* Save load address */
|
|
|
- la t0, _load_start
|
|
|
- la t1, _start
|
|
|
+ lla t0, _load_start
|
|
|
+ lla t1, _start
|
|
|
REG_S t1, 0(t0)
|
|
|
|
|
|
/* Relocate if load address != link address */
|
|
|
_relocate:
|
|
|
- la t0, _link_start
|
|
|
+ lla t0, _link_start
|
|
|
REG_L t0, 0(t0)
|
|
|
- la t1, _link_end
|
|
|
+ lla t1, _link_end
|
|
|
REG_L t1, 0(t1)
|
|
|
- la t2, _load_start
|
|
|
+ lla t2, _load_start
|
|
|
REG_L t2, 0(t2)
|
|
|
sub t3, t1, t0
|
|
|
add t3, t3, t2
|
|
|
beq t0, t2, _relocate_done
|
|
|
- la t4, _relocate_done
|
|
|
+ lla t4, _relocate_done
|
|
|
sub t4, t4, t2
|
|
|
add t4, t4, t0
|
|
|
blt t2, t0, _relocate_copy_to_upper
|
|
|
_relocate_copy_to_lower:
|
|
|
ble t1, t2, _relocate_copy_to_lower_loop
|
|
|
- la t3, _relocate_lottery
|
|
|
+ lla t3, _relocate_lottery
|
|
|
BRANGE t2, t1, t3, _start_hang
|
|
|
- la t3, _boot_status
|
|
|
+ lla t3, _boot_status
|
|
|
BRANGE t2, t1, t3, _start_hang
|
|
|
- la t3, _relocate
|
|
|
- la t5, _relocate_done
|
|
|
+ lla t3, _relocate
|
|
|
+ lla t5, _relocate_done
|
|
|
BRANGE t2, t1, t3, _start_hang
|
|
|
BRANGE t2, t1, t5, _start_hang
|
|
|
BRANGE t3, t5, t2, _start_hang
|
|
@@ -102,12 +102,12 @@ _relocate_copy_to_lower_loop:
|
|
|
jr t4
|
|
|
_relocate_copy_to_upper:
|
|
|
ble t3, t0, _relocate_copy_to_upper_loop
|
|
|
- la t2, _relocate_lottery
|
|
|
+ lla t2, _relocate_lottery
|
|
|
BRANGE t0, t3, t2, _start_hang
|
|
|
- la t2, _boot_status
|
|
|
+ lla t2, _boot_status
|
|
|
BRANGE t0, t3, t2, _start_hang
|
|
|
- la t2, _relocate
|
|
|
- la t5, _relocate_done
|
|
|
+ lla t2, _relocate
|
|
|
+ lla t5, _relocate_done
|
|
|
BRANGE t0, t3, t2, _start_hang
|
|
|
BRANGE t0, t3, t5, _start_hang
|
|
|
BRANGE t2, t5, t0, _start_hang
|
|
@@ -119,12 +119,12 @@ _relocate_copy_to_upper_loop:
|
|
|
blt t0, t1, _relocate_copy_to_upper_loop
|
|
|
jr t4
|
|
|
_wait_relocate_copy_done:
|
|
|
- la t0, _start
|
|
|
- la t1, _link_start
|
|
|
+ lla t0, _start
|
|
|
+ lla t1, _link_start
|
|
|
REG_L t1, 0(t1)
|
|
|
beq t0, t1, _wait_for_boot_hart
|
|
|
- la t2, _boot_status
|
|
|
- la t3, _wait_for_boot_hart
|
|
|
+ lla t2, _boot_status
|
|
|
+ lla t3, _wait_for_boot_hart
|
|
|
sub t3, t3, t0
|
|
|
add t3, t3, t1
|
|
|
1:
|
|
@@ -143,10 +143,10 @@ _relocate_done:
|
|
|
* Mark relocate copy done
|
|
|
* Use _boot_status copy relative to the load address
|
|
|
*/
|
|
|
- la t0, _boot_status
|
|
|
- la t1, _link_start
|
|
|
+ lla t0, _boot_status
|
|
|
+ lla t1, _link_start
|
|
|
REG_L t1, 0(t1)
|
|
|
- la t2, _load_start
|
|
|
+ lla t2, _load_start
|
|
|
REG_L t2, 0(t2)
|
|
|
sub t0, t0, t1
|
|
|
add t0, t0, t2
|
|
@@ -161,19 +161,19 @@ _relocate_done:
|
|
|
call _reset_regs
|
|
|
|
|
|
/* Zero-out BSS */
|
|
|
- la s4, _bss_start
|
|
|
- la s5, _bss_end
|
|
|
+ lla s4, _bss_start
|
|
|
+ lla s5, _bss_end
|
|
|
_bss_zero:
|
|
|
REG_S zero, (s4)
|
|
|
add s4, s4, __SIZEOF_POINTER__
|
|
|
blt s4, s5, _bss_zero
|
|
|
|
|
|
/* Setup temporary trap handler */
|
|
|
- la s4, _start_hang
|
|
|
+ lla s4, _start_hang
|
|
|
csrw CSR_MTVEC, s4
|
|
|
|
|
|
/* Setup temporary stack */
|
|
|
- la s4, _fw_end
|
|
|
+ lla s4, _fw_end
|
|
|
li s5, (SBI_SCRATCH_SIZE * 2)
|
|
|
add sp, s4, s5
|
|
|
|
|
@@ -184,7 +184,7 @@ _bss_zero:
|
|
|
|
|
|
#ifdef FW_FDT_PATH
|
|
|
/* Override previous arg1 */
|
|
|
- la a1, fw_fdt_bin
|
|
|
+ lla a1, fw_fdt_bin
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
@@ -202,7 +202,7 @@ _bss_zero:
|
|
|
* s7 -> HART Count
|
|
|
* s8 -> HART Stack Size
|
|
|
*/
|
|
|
- la a4, platform
|
|
|
+ lla a4, platform
|
|
|
#if __riscv_xlen == 64
|
|
|
lwu s7, SBI_PLATFORM_HART_COUNT_OFFSET(a4)
|
|
|
lwu s8, SBI_PLATFORM_HART_STACK_SIZE_OFFSET(a4)
|
|
@@ -212,7 +212,7 @@ _bss_zero:
|
|
|
#endif
|
|
|
|
|
|
/* Setup scratch space for all the HARTs*/
|
|
|
- la tp, _fw_end
|
|
|
+ lla tp, _fw_end
|
|
|
mul a5, s7, s8
|
|
|
add tp, tp, a5
|
|
|
/* Keep a copy of tp */
|
|
@@ -230,8 +230,8 @@ _scratch_init:
|
|
|
|
|
|
/* Initialize scratch space */
|
|
|
/* Store fw_start and fw_size in scratch space */
|
|
|
- la a4, _fw_start
|
|
|
- la a5, _fw_end
|
|
|
+ lla a4, _fw_start
|
|
|
+ lla a5, _fw_end
|
|
|
mul t0, s7, s8
|
|
|
add a5, a5, t0
|
|
|
sub a5, a5, a4
|
|
@@ -253,16 +253,16 @@ _scratch_init:
|
|
|
REG_S a0, SBI_SCRATCH_NEXT_MODE_OFFSET(tp)
|
|
|
MOV_3R a0, s0, a1, s1, a2, s2
|
|
|
/* Store warm_boot address in scratch space */
|
|
|
- la a4, _start_warm
|
|
|
+ lla a4, _start_warm
|
|
|
REG_S a4, SBI_SCRATCH_WARMBOOT_ADDR_OFFSET(tp)
|
|
|
/* Store platform address in scratch space */
|
|
|
- la a4, platform
|
|
|
+ lla a4, platform
|
|
|
REG_S a4, SBI_SCRATCH_PLATFORM_ADDR_OFFSET(tp)
|
|
|
/* Store hartid-to-scratch function address in scratch space */
|
|
|
- la a4, _hartid_to_scratch
|
|
|
+ lla a4, _hartid_to_scratch
|
|
|
REG_S a4, SBI_SCRATCH_HARTID_TO_SCRATCH_OFFSET(tp)
|
|
|
/* Store trap-exit function address in scratch space */
|
|
|
- la a4, _trap_exit
|
|
|
+ lla a4, _trap_exit
|
|
|
REG_S a4, SBI_SCRATCH_TRAP_EXIT_OFFSET(tp)
|
|
|
/* Clear tmp0 in scratch space */
|
|
|
REG_S zero, SBI_SCRATCH_TMP0_OFFSET(tp)
|
|
@@ -343,7 +343,7 @@ _fdt_reloc_done:
|
|
|
|
|
|
/* mark boot hart done */
|
|
|
li t0, BOOT_STATUS_BOOT_HART_DONE
|
|
|
- la t1, _boot_status
|
|
|
+ lla t1, _boot_status
|
|
|
REG_S t0, 0(t1)
|
|
|
fence rw, rw
|
|
|
j _start_warm
|
|
@@ -351,7 +351,7 @@ _fdt_reloc_done:
|
|
|
/* waiting for boot hart to be done (_boot_status == 2) */
|
|
|
_wait_for_boot_hart:
|
|
|
li t0, BOOT_STATUS_BOOT_HART_DONE
|
|
|
- la t1, _boot_status
|
|
|
+ lla t1, _boot_status
|
|
|
REG_L t1, 0(t1)
|
|
|
/* Reduce the bus traffic so that boot hart may proceed faster */
|
|
|
nop
|
|
@@ -369,7 +369,7 @@ _start_warm:
|
|
|
csrw CSR_MIP, zero
|
|
|
|
|
|
/* Find HART count and HART stack size */
|
|
|
- la a4, platform
|
|
|
+ lla a4, platform
|
|
|
#if __riscv_xlen == 64
|
|
|
lwu s7, SBI_PLATFORM_HART_COUNT_OFFSET(a4)
|
|
|
lwu s8, SBI_PLATFORM_HART_STACK_SIZE_OFFSET(a4)
|
|
@@ -400,7 +400,7 @@ _start_warm:
|
|
|
3: bge s6, s7, _start_hang
|
|
|
|
|
|
/* Find the scratch space based on HART index */
|
|
|
- la tp, _fw_end
|
|
|
+ lla tp, _fw_end
|
|
|
mul a5, s7, s8
|
|
|
add tp, tp, a5
|
|
|
mul a5, s8, s6
|
|
@@ -415,13 +415,13 @@ _start_warm:
|
|
|
add sp, tp, zero
|
|
|
|
|
|
/* Setup trap handler */
|
|
|
- la a4, _trap_handler
|
|
|
+ lla a4, _trap_handler
|
|
|
#if __riscv_xlen == 32
|
|
|
csrr a5, CSR_MISA
|
|
|
srli a5, a5, ('H' - 'A')
|
|
|
andi a5, a5, 0x1
|
|
|
beq a5, zero, _skip_trap_handler_rv32_hyp
|
|
|
- la a4, _trap_handler_rv32_hyp
|
|
|
+ lla a4, _trap_handler_rv32_hyp
|
|
|
_skip_trap_handler_rv32_hyp:
|
|
|
#endif
|
|
|
csrw CSR_MTVEC, a4
|
|
@@ -432,7 +432,7 @@ _skip_trap_handler_rv32_hyp:
|
|
|
srli a5, a5, ('H' - 'A')
|
|
|
andi a5, a5, 0x1
|
|
|
beq a5, zero, _skip_trap_exit_rv32_hyp
|
|
|
- la a4, _trap_exit_rv32_hyp
|
|
|
+ lla a4, _trap_exit_rv32_hyp
|
|
|
csrr a5, CSR_MSCRATCH
|
|
|
REG_S a4, SBI_SCRATCH_TRAP_EXIT_OFFSET(a5)
|
|
|
_skip_trap_exit_rv32_hyp:
|
|
@@ -468,7 +468,7 @@ _hartid_to_scratch:
|
|
|
* t1 -> HART Stack End
|
|
|
* t2 -> Temporary
|
|
|
*/
|
|
|
- la t2, platform
|
|
|
+ lla t2, platform
|
|
|
#if __riscv_xlen == 64
|
|
|
lwu t0, SBI_PLATFORM_HART_STACK_SIZE_OFFSET(t2)
|
|
|
lwu t2, SBI_PLATFORM_HART_COUNT_OFFSET(t2)
|
|
@@ -478,7 +478,7 @@ _hartid_to_scratch:
|
|
|
#endif
|
|
|
sub t2, t2, a1
|
|
|
mul t2, t2, t0
|
|
|
- la t1, _fw_end
|
|
|
+ lla t1, _fw_end
|
|
|
add t1, t1, t2
|
|
|
li t2, SBI_SCRATCH_SIZE
|
|
|
sub a0, t1, t2
|