[sw/silicon_creator] Disable flash in pre-CRT exception handler
Signed-off-by: Michael Munday <mike.munday@lowrisc.org>
diff --git a/sw/device/silicon_creator/lib/irq_asm.S b/sw/device/silicon_creator/lib/irq_asm.S
index 7c98740..29af854 100644
--- a/sw/device/silicon_creator/lib/irq_asm.S
+++ b/sw/device/silicon_creator/lib/irq_asm.S
@@ -4,6 +4,7 @@
#include "sw/device/lib/base/multibits_asm.h"
#include "hw/top_earlgrey/sw/autogen/top_earlgrey_memory.h"
+#include "flash_ctrl_regs.h"
#include "rstmgr_regs.h"
// This code is in the .crt section since it is designed to be safe
@@ -27,6 +28,13 @@
li t1, MULTIBIT_ASM_BOOL4_TRUE
sw t1, RSTMGR_RESET_REQ_REG_OFFSET(t0)
+ // Disable access to flash.
+ //
+ // This is done after requesting a reset so that this function will
+ // work even if it is in flash.
+ li t0, TOP_EARLGREY_FLASH_CTRL_CORE_BASE_ADDR
+ sw zero, FLASH_CTRL_DIS_REG_OFFSET(t0)
+
// Enter a wait for interrupt loop, the device should reset shortly.
.L_wfi_loop:
wfi
diff --git a/sw/device/silicon_creator/lib/meson.build b/sw/device/silicon_creator/lib/meson.build
index 231eced..0a2e7c8 100644
--- a/sw/device/silicon_creator/lib/meson.build
+++ b/sw/device/silicon_creator/lib/meson.build
@@ -144,6 +144,7 @@
'sw_silicon_creator_lib_irq_asm',
sources: [
hw_ip_rstmgr_reg_h,
+ hw_ip_flash_ctrl_reg_h,
'irq_asm.S',
],
),