7 #include "gtest/gtest.h"
9 #include "sw/device/lib/base/mock_mmio.h"
10 #include "sw/device/lib/base/multibits.h"
14 #include "sensor_ctrl_regs.h"
16 namespace dif_sensor_ctrl_unittest {
25 ASSERT_DIF_OK(dif_sensor_ctrl_init(dev().region(), &sensor_ctrl));
28 dif_sensor_ctrl_t sensor_ctrl;
32 uint32_t good_idx = 0;
33 uint32_t bad_idx = SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS;
80 TEST_F(SensorCtrlTest, TriggerEvents) {
81 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
82 EXPECT_READ32(SENSOR_CTRL_ALERT_TRIG_REG_OFFSET, 0);
83 EXPECT_WRITE32(SENSOR_CTRL_ALERT_TRIG_REG_OFFSET, 1 << i);
88 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
89 EXPECT_READ32(SENSOR_CTRL_ALERT_TRIG_REG_OFFSET, -1);
90 EXPECT_WRITE32(SENSOR_CTRL_ALERT_TRIG_REG_OFFSET, ~(1 << i));
95 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
97 EXPECT_READ32(SENSOR_CTRL_ALERT_TRIG_REG_OFFSET, 1 << i);
103 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
105 EXPECT_READ32(SENSOR_CTRL_ALERT_TRIG_REG_OFFSET, ~(1 << i));
112 TEST_F(SensorCtrlTest, AlertEnable) {
113 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
114 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 1);
115 EXPECT_WRITE32(SENSOR_CTRL_ALERT_EN_0_REG_OFFSET + i * 4,
121 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
122 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 1);
123 EXPECT_WRITE32(SENSOR_CTRL_ALERT_EN_0_REG_OFFSET + i * 4,
124 kMultiBitBool4False);
129 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 0);
133 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 0);
138 TEST_F(SensorCtrlTest, AlertFatality) {
139 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
140 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 1);
141 EXPECT_READ32(SENSOR_CTRL_FATAL_ALERT_EN_REG_OFFSET, 0);
142 EXPECT_WRITE32(SENSOR_CTRL_FATAL_ALERT_EN_REG_OFFSET, 1 << i);
147 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
148 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 1);
149 EXPECT_READ32(SENSOR_CTRL_FATAL_ALERT_EN_REG_OFFSET, -1);
150 EXPECT_WRITE32(SENSOR_CTRL_FATAL_ALERT_EN_REG_OFFSET, ~(1 << i));
155 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 0);
160 EXPECT_READ32(SENSOR_CTRL_CFG_REGWEN_REG_OFFSET, 0);
165 TEST_F(SensorCtrlTest, GetRecovEvents) {
166 uint32_t events_mask = (1 << SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS) - 1;
170 EXPECT_READ32(SENSOR_CTRL_RECOV_ALERT_REG_OFFSET, exp_events);
172 EXPECT_EQ(exp_events, rcv_events);
174 exp_events = 0xdc5a8492 & events_mask;
175 EXPECT_READ32(SENSOR_CTRL_RECOV_ALERT_REG_OFFSET, exp_events);
177 EXPECT_EQ(exp_events, rcv_events);
180 TEST_F(SensorCtrlTest, ClearRecovEvent) {
181 for (
size_t i = 0; i < SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS; i++) {
182 EXPECT_WRITE32(SENSOR_CTRL_RECOV_ALERT_REG_OFFSET, (1 << i));
187 TEST_F(SensorCtrlTest, GetFatalEvents) {
188 uint32_t events_mask = (1 << SENSOR_CTRL_PARAM_NUM_ALERT_EVENTS) - 1;
192 EXPECT_READ32(SENSOR_CTRL_FATAL_ALERT_REG_OFFSET, exp_events);
194 EXPECT_EQ(exp_events, rcv_events);
196 exp_events = 0x9874bac & events_mask;
197 EXPECT_READ32(SENSOR_CTRL_FATAL_ALERT_REG_OFFSET, exp_events);
199 EXPECT_EQ(exp_events, rcv_events);
202 TEST_F(SensorCtrlTest, GetAstInitStatus) {
204 uint32_t exp[4] = {0xa7, 0xa6, 0xbc, 0xf1};
205 for (
size_t i = 0; i <
sizeof(exp) /
sizeof(uint32_t); i++) {
206 EXPECT_READ32(SENSOR_CTRL_STATUS_REG_OFFSET, exp[i]);
214 TEST_F(SensorCtrlTest, GetIoPowerStatus) {
216 uint32_t exp[4] = {0xa7, 0xa0, 0xa3, 0xa5};
218 for (
size_t i = 0; i <
sizeof(exp) /
sizeof(uint32_t); i++) {
219 EXPECT_READ32(SENSOR_CTRL_STATUS_REG_OFFSET, exp[i]);