[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',
     ],
   ),