5 #include "sw/device/silicon_creator/lib/drivers/rstmgr.h"
7 #include "gtest/gtest.h"
9 #include "sw/device/lib/base/mock_abs_mmio.h"
10 #include "sw/device/lib/base/multibits.h"
11 #include "sw/device/silicon_creator/testing/rom_test.h"
14 #include "rstmgr_regs.h"
16 namespace rstmgr_unittest {
18 using ::testing::ElementsAre;
23 rom_test::MockAbsMmio mmio_;
27 EXPECT_ABS_READ32(base_ + RSTMGR_RESET_INFO_REG_OFFSET, 0x12345);
29 EXPECT_EQ(rstmgr_reason_get(), 0x12345);
32 TEST_F(RstmgrTest, CollectAlertInfo) {
33 EXPECT_ABS_READ32(base_ + RSTMGR_ALERT_INFO_ATTR_REG_OFFSET, 5);
34 EXPECT_ABS_WRITE32(base_ + RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 0x00);
35 EXPECT_ABS_READ32(base_ + RSTMGR_ALERT_INFO_REG_OFFSET, 1);
36 EXPECT_ABS_WRITE32(base_ + RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 0x10);
37 EXPECT_ABS_READ32(base_ + RSTMGR_ALERT_INFO_REG_OFFSET, 2);
38 EXPECT_ABS_WRITE32(base_ + RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 0x20);
39 EXPECT_ABS_READ32(base_ + RSTMGR_ALERT_INFO_REG_OFFSET, 3);
40 EXPECT_ABS_WRITE32(base_ + RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 0x30);
41 EXPECT_ABS_READ32(base_ + RSTMGR_ALERT_INFO_REG_OFFSET, 4);
42 EXPECT_ABS_WRITE32(base_ + RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 0x40);
43 EXPECT_ABS_READ32(base_ + RSTMGR_ALERT_INFO_REG_OFFSET, 5);
46 rstmgr_alert_info_collect(&alert_info);
47 EXPECT_EQ(alert_info.length, 5);
48 EXPECT_THAT(alert_info.info,
49 ElementsAre(1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
52 TEST_F(RstmgrTest, ClearResetReason) {
53 uint32_t mask = 1u << kRstmgrReasonPowerOn;
54 EXPECT_ABS_WRITE32(base_ + RSTMGR_RESET_INFO_REG_OFFSET, mask);
55 rstmgr_reason_clear(mask);
58 TEST_F(RstmgrTest, EnableAlertInfo) {
59 EXPECT_ABS_WRITE32(base_ + RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 1);
60 rstmgr_alert_info_enable();
63 TEST_F(RstmgrTest, Reset) {
64 EXPECT_ABS_WRITE32(base_ + RSTMGR_RESET_REQ_REG_OFFSET, kMultiBitBool4True);