[sw/silicon_creator] Disable flash during shutdown.

Updates #7148.

Signed-off-by: Michael Munday <mike.munday@lowrisc.org>
diff --git a/sw/device/silicon_creator/lib/shutdown.c b/sw/device/silicon_creator/lib/shutdown.c
index 490ca53..170aec2 100644
--- a/sw/device/silicon_creator/lib/shutdown.c
+++ b/sw/device/silicon_creator/lib/shutdown.c
@@ -218,8 +218,7 @@
 
 SHUTDOWN_FUNC(NO_MODIFIERS, shutdown_flash_kill(void)) {
   enum { kBase = TOP_EARLGREY_FLASH_CTRL_CORE_BASE_ADDR };
-  // TODO(lowRISC/opentitan#7148): Add flash disable when the hw is implemented.
-  // abs_mmio_write32(kBase + FLASH_CTRL_FLASH_DISABLE_REG_OFFSET, 1);
+  abs_mmio_write32(kBase + FLASH_CTRL_FLASH_DISABLE_REG_OFFSET, 1);
 }
 
 SHUTDOWN_FUNC(noreturn, shutdown_hang(void)) {
diff --git a/sw/device/silicon_creator/lib/shutdown_unittest.cc b/sw/device/silicon_creator/lib/shutdown_unittest.cc
index 55b5b95..5d94cb0 100644
--- a/sw/device/silicon_creator/lib/shutdown_unittest.cc
+++ b/sw/device/silicon_creator/lib/shutdown_unittest.cc
@@ -14,6 +14,7 @@
 #include "sw/device/silicon_creator/testing/mask_rom_test.h"
 
 #include "alert_handler_regs.h"
+#include "flash_ctrl_regs.h"
 #include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
 #include "otp_ctrl_regs.h"
 
@@ -43,6 +44,9 @@
   MOCK_METHOD(void, shutdown_keymgr_kill, ());
   MOCK_METHOD(void, shutdown_flash_kill, ());
   MOCK_METHOD(void, shutdown_hang, ());
+
+ protected:
+  mask_rom_test::MockAbsMmio mmio_;
 };
 
 }  // namespace internal
@@ -59,6 +63,9 @@
   return MockShutdown::Instance().shutdown_flash_kill();
 }
 void shutdown_hang(void) { return MockShutdown::Instance().shutdown_hang(); }
+
+// Real implementations of the above mocks.
+extern void unmocked_shutdown_flash_kill(void);
 }  // extern "C"
 
 constexpr uint32_t Pack32(uint8_t a, uint8_t b, uint8_t c, uint8_t d) {
@@ -510,5 +517,12 @@
   shutdown_finalize(kErrorUnknown);
 }
 
+TEST_F(ShutdownTest, FlashKill) {
+  EXPECT_ABS_WRITE32(TOP_EARLGREY_FLASH_CTRL_CORE_BASE_ADDR +
+                         FLASH_CTRL_FLASH_DISABLE_REG_OFFSET,
+                     1);
+  unmocked_shutdown_flash_kill();
+}
+
 }  // namespace
 }  // namespace shutdown_unittest