5 #include "sw/device/silicon_creator/lib/drivers/watchdog.h"
9 #include "gtest/gtest.h"
10 #include "sw/device/lib/base/mock_abs_mmio.h"
11 #include "sw/device/silicon_creator/lib/base/mock_sec_mmio.h"
12 #include "sw/device/silicon_creator/lib/drivers/lifecycle.h"
13 #include "sw/device/silicon_creator/lib/drivers/mock_otp.h"
14 #include "sw/device/silicon_creator/testing/rom_test.h"
16 #include "aon_timer_regs.h"
18 #include "otp_ctrl_regs.h"
19 #include "pwrmgr_regs.h"
21 namespace watchdog_unittest {
23 using ::testing::Return;
27 void ExpectCdcSync() {
30 EXPECT_ABS_READ32(pwrmgr_ + PWRMGR_CFG_CDC_SYNC_REG_OFFSET, 0);
31 EXPECT_ABS_WRITE32(pwrmgr_ + PWRMGR_CFG_CDC_SYNC_REG_OFFSET, 1);
32 EXPECT_ABS_READ32(pwrmgr_ + PWRMGR_CFG_CDC_SYNC_REG_OFFSET, 0);
40 const uint32_t kBiteThreshold = 0x12345678;
44 OTP_CTRL_PARAM_OWNER_SW_CFG_ROM_WATCHDOG_BITE_THRESHOLD_CYCLES_OFFSET))
45 .WillOnce(Return(kBiteThreshold));
47 EXPECT_SEC_WRITE32(pwrmgr_ + PWRMGR_RESET_EN_REG_OFFSET,
49 {PWRMGR_RESET_EN_EN_1_BIT,
true},
52 EXPECT_SEC_WRITE32(wdog_ + AON_TIMER_WDOG_CTRL_REG_OFFSET,
53 0 << AON_TIMER_WDOG_CTRL_ENABLE_BIT);
54 EXPECT_ABS_WRITE32(wdog_ + AON_TIMER_WDOG_COUNT_REG_OFFSET, 0);
55 EXPECT_ABS_WRITE32(wdog_ + AON_TIMER_WDOG_BARK_THOLD_REG_OFFSET,
56 kBiteThreshold * 9 / 8);
57 EXPECT_SEC_WRITE32(wdog_ + AON_TIMER_WDOG_BITE_THOLD_REG_OFFSET,
59 EXPECT_SEC_WRITE32(wdog_ + AON_TIMER_WDOG_CTRL_REG_OFFSET,
60 enabled << AON_TIMER_WDOG_CTRL_ENABLE_BIT);
66 rom_test::MockAbsMmio abs_;
67 rom_test::MockSecMmio sec_;
68 rom_test::MockOtp otp_;
71 TEST_F(WatchdogTest, InitializeNoOtp) {
72 constexpr std::array<lifecycle_state_t, 2> kLifecycleStates = {kLcStateTest,
74 for (
const auto lc : kLifecycleStates) {
81 TEST_F(WatchdogTest, InitializeOtp) {
82 constexpr std::array<lifecycle_state_t, 3> kLifecycleStates = {
83 kLcStateDev, kLcStateProd, kLcStateProdEnd};
84 for (
const auto lc : kLifecycleStates) {
91 TEST_F(WatchdogTest, Disable) {
92 EXPECT_SEC_WRITE32(wdog_ + AON_TIMER_WDOG_CTRL_REG_OFFSET,
93 0 << AON_TIMER_WDOG_CTRL_ENABLE_BIT);
97 TEST_F(WatchdogTest, Pet) {
98 EXPECT_ABS_WRITE32(wdog_ + AON_TIMER_WDOG_COUNT_REG_OFFSET, 0);
102 TEST_F(WatchdogTest, Get) {
103 EXPECT_ABS_READ32(wdog_ + AON_TIMER_WDOG_COUNT_REG_OFFSET, 12345);
104 EXPECT_EQ(watchdog_get(), 12345);