Software APIs
rstmgr_unittest.cc
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #include "sw/device/silicon_creator/lib/drivers/rstmgr.h"
6 
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"
12 
14 #include "rstmgr_regs.h" // Generated.
15 
16 namespace rstmgr_unittest {
17 namespace {
18 using ::testing::ElementsAre;
19 
20 class RstmgrTest : public rom_test::RomTest {
21  protected:
22  uint32_t base_ = TOP_EARLGREY_RSTMGR_AON_BASE_ADDR;
23  rom_test::MockAbsMmio mmio_;
24 };
25 
26 TEST_F(RstmgrTest, GetResetReason) {
27  EXPECT_ABS_READ32(base_ + RSTMGR_RESET_INFO_REG_OFFSET, 0x12345);
28 
29  EXPECT_EQ(rstmgr_reason_get(), 0x12345);
30 }
31 
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);
44 
45  rstmgr_info_t alert_info{};
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));
50 }
51 
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);
56 }
57 
58 TEST_F(RstmgrTest, EnableAlertInfo) {
59  EXPECT_ABS_WRITE32(base_ + RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 1);
60  rstmgr_alert_info_enable();
61 }
62 
63 TEST_F(RstmgrTest, Reset) {
64  EXPECT_ABS_WRITE32(base_ + RSTMGR_RESET_REQ_REG_OFFSET, kMultiBitBool4True);
65  rstmgr_reset();
66 }
67 
68 } // namespace
69 } // namespace rstmgr_unittest