[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