From dd1dce53a69d7f57e483286c068fd22c3cd1ba94 Mon Sep 17 00:00:00 2001 From: Atish Patra Date: Wed, 6 Mar 2019 15:18:29 -0800 Subject: [PATCH] firmware: Reset all registers and flush icache A warm reset using reset button may put icache and registers in non-coherent state. Flush the icache and reset all registers for every hart. Signed-off-by: Atish Patra --- firmware/fw_base.S | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/firmware/fw_base.S b/firmware/fw_base.S index dad467d7f..723722c1b 100644 --- a/firmware/fw_base.S +++ b/firmware/fw_base.S @@ -25,6 +25,8 @@ _start: csrr a6, CSR_MHARTID blt zero, a6, _wait_for_boot_hart + li ra, 0 + call _reset_regs /* Zero-out BSS */ la a4, _bss_start la a5, _bss_end @@ -391,6 +393,8 @@ _trap_handler_all_mode: .globl _reset_regs _reset_regs: + /* flush the instruction cache */ + fence.i /* Reset all registers except ra, a0,a1 */ li sp, 0 li gp, 0