Software APIs
dif_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 
6 
7 #include "gtest/gtest.h"
10 #include "sw/device/lib/base/mock_mmio.h"
13 
14 #include "rstmgr_regs.h" // Generated.
15 
16 namespace dif_rstmgr_unittest {
17 namespace {
20 using testing::Each;
21 using testing::ElementsAreArray;
22 using testing::Eq;
23 using testing::IsSubsetOf;
24 using testing::Test;
25 
26 class RstmgrTest : public Test, public MmioTest {
27  protected:
28  dif_rstmgr_t rstmgr_ = {.base_addr = dev().region()};
29 };
30 
31 class ResetTest : public RstmgrTest {};
32 
33 TEST_F(ResetTest, NullArgs) { EXPECT_DIF_BADARG(dif_rstmgr_reset(nullptr)); }
34 
35 TEST_F(ResetTest, Success) {
36  EXPECT_WRITE32(RSTMGR_RESET_INFO_REG_OFFSET,
37  std::numeric_limits<uint32_t>::max());
38 
39  for (uint32_t i = 0; i < RSTMGR_PARAM_NUM_SW_RESETS; i++) {
40  EXPECT_WRITE32(RSTMGR_SW_RST_CTRL_N_0_REG_OFFSET + 4 * i,
41  std::numeric_limits<uint32_t>::max());
42  }
43 
45 }
46 
47 class ResetLockTest : public RstmgrTest {};
48 
49 TEST_F(ResetLockTest, NullArgs) {
51 }
52 
53 TEST_F(ResetLockTest, BadPeripheral) {
55  dif_rstmgr_reset_lock(&rstmgr_, RSTMGR_PARAM_NUM_SW_RESETS));
56 }
57 
58 TEST_F(ResetLockTest, Success) {
59  for (uint32_t reg_index = 0; reg_index < RSTMGR_PARAM_NUM_SW_RESETS;
60  ++reg_index) {
61  // When reg is set to `0`, it means that the software reset for the
62  // peripheral is locked.
63  EXPECT_WRITE32(RSTMGR_SW_RST_REGWEN_0_REG_OFFSET + reg_index * 4, 0);
64 
65  EXPECT_DIF_OK(dif_rstmgr_reset_lock(&rstmgr_, reg_index));
66  }
67 }
68 
69 class ResetIsLockedTest : public RstmgrTest {};
70 
71 TEST_F(ResetIsLockedTest, NullArgs) {
72  bool is_locked;
73  EXPECT_DIF_BADARG(dif_rstmgr_reset_is_locked(nullptr, 0, nullptr));
74  EXPECT_DIF_BADARG(dif_rstmgr_reset_is_locked(nullptr, 0, &is_locked));
75  EXPECT_DIF_BADARG(dif_rstmgr_reset_is_locked(&rstmgr_, 0, nullptr));
76 }
77 
78 TEST_F(ResetIsLockedTest, BadPeripheral) {
79  bool is_locked;
81  &rstmgr_, RSTMGR_PARAM_NUM_SW_RESETS, &is_locked));
82 }
83 
84 TEST_F(ResetIsLockedTest, Success) {
85  for (uint32_t reg_index = 0; reg_index < RSTMGR_PARAM_NUM_SW_RESETS;
86  ++reg_index) {
87  // When bit is set to `0`, it means that the software reset for the
88  // peripheral is locked.
89  EXPECT_READ32(RSTMGR_SW_RST_REGWEN_0_REG_OFFSET + reg_index * 4, 0);
90 
91  bool is_locked = false;
92  EXPECT_DIF_OK(dif_rstmgr_reset_is_locked(&rstmgr_, reg_index, &is_locked));
93  EXPECT_TRUE(is_locked);
94 
95  is_locked = true;
96  EXPECT_READ32(RSTMGR_SW_RST_REGWEN_0_REG_OFFSET + reg_index * 4, 1);
97  EXPECT_DIF_OK(dif_rstmgr_reset_is_locked(&rstmgr_, reg_index, &is_locked));
98  EXPECT_FALSE(is_locked);
99  }
100 }
101 
103  protected:
104  // Make sure that the test is up-to-date with the implementation.
106  // Make sure that the last reset reason in the test matches the last reset
107  // reason in the DIF at the time of writing this test.
108  bitfield_field32_t last = reset_info_reasons_.back();
109  uint32_t bitfield = bitfield_field32_write(0, last, last.mask);
110  EXPECT_EQ(bitfield, kDifRstmgrResetInfoHwReq);
111 
112  // Number of reset reasons between test and the peripheral match at the
113  // time of writing this test.
114  EXPECT_EQ(reset_info_reasons_.size(), 3);
115  }
116 
117  const std::vector<bitfield_field32_t> reset_info_reasons_{
118  bitfield_bit32_to_field32(RSTMGR_RESET_INFO_POR_BIT),
119  bitfield_bit32_to_field32(RSTMGR_RESET_INFO_LOW_POWER_EXIT_BIT),
120  RSTMGR_RESET_INFO_HW_REQ_FIELD,
121  };
122 };
123 
124 TEST_F(ResetCausesGetTest, NullArgs) {
126  EXPECT_DIF_BADARG(dif_rstmgr_reset_info_get(nullptr, nullptr));
128  EXPECT_DIF_BADARG(dif_rstmgr_reset_info_get(&rstmgr_, nullptr));
129 }
130 
131 TEST_F(ResetCausesGetTest, Success) {
132  // Single reason expectations.
133  for (auto reason : reset_info_reasons_) {
134  uint32_t bitfield = bitfield_field32_write(0, reason, reason.mask);
135  EXPECT_READ32(RSTMGR_RESET_INFO_REG_OFFSET, bitfield);
136 
138  EXPECT_DIF_OK(dif_rstmgr_reset_info_get(&rstmgr_, &info));
139  EXPECT_EQ(info & bitfield, info);
140  }
141 
142  // The first and the last reset causes.
143  bitfield_field32_t first = reset_info_reasons_.front();
144  bitfield_field32_t last = reset_info_reasons_.back();
145  EXPECT_READ32(RSTMGR_RESET_INFO_REG_OFFSET, {
146  {first.index, first.mask},
147  {last.index, last.mask},
148  });
149 
151  EXPECT_DIF_OK(dif_rstmgr_reset_info_get(&rstmgr_, &info));
152 
153  // Make sure that `kDifRstmgrResetInfoPor` and `kDifRstmgrResetInfoHwReq`
154  // reset causes are set.
155  EXPECT_EQ(info & (kDifRstmgrResetInfoPor | kDifRstmgrResetInfoHwReq), info);
156 }
157 
159 
160 TEST_F(ResetCausesClearTest, NullArgs) {
162 }
163 
164 TEST_F(ResetCausesClearTest, Success) {
165  EXPECT_WRITE32(RSTMGR_RESET_INFO_REG_OFFSET,
166  std::numeric_limits<uint32_t>::max());
167 
169 }
170 
171 class AlertInfoSetTest : public RstmgrTest {};
172 
173 TEST_F(AlertInfoSetTest, NullArgs) {
176 }
177 
178 TEST_F(AlertInfoSetTest, Success) {
179  // Expect a read of regwen.
180  uint32_t alert_regwen =
181  bitfield_bit32_write(std::numeric_limits<uint32_t>::max(), 0, true);
182  EXPECT_READ32(RSTMGR_ALERT_REGWEN_REG_OFFSET, alert_regwen);
183 
184  // Enable.
185  EXPECT_WRITE32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET,
186  {
187  {RSTMGR_ALERT_INFO_CTRL_EN_BIT, true},
188  });
190 
191  // Disable.
192  EXPECT_READ32(RSTMGR_ALERT_REGWEN_REG_OFFSET, alert_regwen);
193  EXPECT_WRITE32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET,
194  {
195  {RSTMGR_ALERT_INFO_CTRL_EN_BIT, false},
196  });
199 }
200 
201 class AlertInfoGetTest : public RstmgrTest {};
202 
203 TEST_F(AlertInfoGetTest, NullArgs) {
206  dif_toggle_t state;
208 }
209 
210 TEST_F(AlertInfoGetTest, Success) {
211  // Enabled.
212  EXPECT_READ32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET,
213  {
214  {RSTMGR_ALERT_INFO_CTRL_EN_BIT, true},
215  });
216 
219  EXPECT_EQ(state, kDifToggleEnabled);
220 
221  // Disabled.
222  //
223  // Make sure that the only relevant `enabled` bit is read - set all bits
224  // high apart from the `enabled` bit.
225  uint32_t register_value =
226  bitfield_bit32_write(std::numeric_limits<uint32_t>::max(),
227  RSTMGR_ALERT_INFO_CTRL_EN_BIT, false);
228  EXPECT_READ32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, register_value);
229 
230  state = kDifToggleEnabled;
232  EXPECT_EQ(state, kDifToggleDisabled);
233 }
234 
236 
237 TEST_F(AlertInfoGetSizeTest, Success) {
238  EXPECT_READ32(RSTMGR_ALERT_INFO_ATTR_REG_OFFSET, 5);
239 
240  size_t size = 0;
242  EXPECT_EQ(size, 5);
243 }
244 
245 TEST_F(AlertInfoGetSizeTest, BadArgs) {
248  size_t size;
250 }
251 
253  protected:
255  for (uint32_t i = 0; i < DIF_RSTMGR_ALERT_INFO_MAX_SIZE; ++i) {
256  src_[i] = dev().GarbageMemory<uint32_t>();
257  }
258  }
259 
261 };
262 
263 TEST_F(AlertInfoDumpReadTest, NullArgs) {
265  nullptr, nullptr, DIF_RSTMGR_ALERT_INFO_MAX_SIZE, nullptr));
266 
267  size_t segments_read;
269  nullptr, nullptr, DIF_RSTMGR_ALERT_INFO_MAX_SIZE, &segments_read));
270 
273  nullptr, &dump[0], DIF_RSTMGR_ALERT_INFO_MAX_SIZE, nullptr));
274 
276  nullptr, &dump[0], DIF_RSTMGR_ALERT_INFO_MAX_SIZE, &segments_read));
277 
279  &rstmgr_, nullptr, DIF_RSTMGR_ALERT_INFO_MAX_SIZE, &segments_read));
280 
282  &rstmgr_, &dump[0], DIF_RSTMGR_ALERT_INFO_MAX_SIZE, nullptr));
283 }
284 
285 TEST_F(AlertInfoDumpReadTest, BadDumpSize) {
286  EXPECT_READ32(RSTMGR_ALERT_INFO_ATTR_REG_OFFSET,
288 
289  size_t segments_read = 0xA5A5A5A5;
291  EXPECT_EQ(dif_rstmgr_alert_info_dump_read(&rstmgr_, &dump[0],
293  &segments_read),
294  kDifError);
295  EXPECT_EQ(segments_read, 0xA5A5A5A5);
296 }
297 
298 TEST_F(AlertInfoDumpReadTest, SuccessFullBuffer) {
299  EXPECT_READ32(RSTMGR_ALERT_INFO_ATTR_REG_OFFSET,
301  EXPECT_READ32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 1);
302 
303  for (uint32_t i = 0; i < DIF_RSTMGR_ALERT_INFO_MAX_SIZE; ++i) {
304  EXPECT_WRITE32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET,
305  {
306  {
307  RSTMGR_ALERT_INFO_CTRL_EN_BIT,
308  true,
309  },
310  {
311  RSTMGR_ALERT_INFO_CTRL_INDEX_OFFSET,
312  i,
313  },
314  });
315 
316  EXPECT_READ32(RSTMGR_ALERT_INFO_REG_OFFSET, src_[i]);
317  }
318 
319  size_t segments_read = 0;
322  &rstmgr_, &dump[0], DIF_RSTMGR_ALERT_INFO_MAX_SIZE, &segments_read));
323  EXPECT_EQ(segments_read, DIF_RSTMGR_ALERT_INFO_MAX_SIZE);
324  EXPECT_THAT(src_, ElementsAreArray(dump));
325 }
326 
327 TEST_F(AlertInfoDumpReadTest, SuccessDumpSmaller) {
328  constexpr uint32_t dump_size = DIF_RSTMGR_ALERT_INFO_MAX_SIZE - 1;
329 
330  EXPECT_READ32(RSTMGR_ALERT_INFO_ATTR_REG_OFFSET, dump_size);
331  EXPECT_READ32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET, 1);
332 
333  for (uint32_t i = 0; i < dump_size; ++i) {
334  EXPECT_WRITE32(RSTMGR_ALERT_INFO_CTRL_REG_OFFSET,
335  {
336  {
337  RSTMGR_ALERT_INFO_CTRL_EN_BIT,
338  true,
339  },
340  {
341  RSTMGR_ALERT_INFO_CTRL_INDEX_OFFSET,
342  i,
343  },
344  });
345 
346  EXPECT_READ32(RSTMGR_ALERT_INFO_REG_OFFSET, src_[i]);
347  }
348 
349  size_t segments_read = 0;
350  dif_rstmgr_alert_info_dump_segment_t dump[dump_size];
352  &rstmgr_, &dump[0], DIF_RSTMGR_ALERT_INFO_MAX_SIZE, &segments_read));
353  EXPECT_EQ(segments_read, dump_size);
354  EXPECT_THAT(dump, IsSubsetOf(src_));
355 }
356 
357 class CpuInfoSetTest : public RstmgrTest {};
358 
359 TEST_F(CpuInfoSetTest, NullArgs) {
362 }
363 
364 TEST_F(CpuInfoSetTest, Success) {
365  // Expect a read of regwen.
366  uint32_t cpu_regwen =
367  bitfield_bit32_write(std::numeric_limits<uint32_t>::max(), 0, true);
368  EXPECT_READ32(RSTMGR_CPU_REGWEN_REG_OFFSET, cpu_regwen);
369 
370  // Enable.
371  EXPECT_WRITE32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET,
372  {
373  {RSTMGR_CPU_INFO_CTRL_EN_BIT, true},
374  });
376 
377  // Disable.
378  EXPECT_READ32(RSTMGR_CPU_REGWEN_REG_OFFSET, cpu_regwen);
379  EXPECT_WRITE32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET,
380  {
381  {RSTMGR_CPU_INFO_CTRL_EN_BIT, false},
382  });
384 }
385 
386 class CpuInfoGetTest : public RstmgrTest {};
387 
388 TEST_F(CpuInfoGetTest, NullArgs) {
391  dif_toggle_t state;
393 }
394 
395 TEST_F(CpuInfoGetTest, Success) {
396  // Enabled.
397  EXPECT_READ32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET,
398  {
399  {RSTMGR_CPU_INFO_CTRL_EN_BIT, true},
400  });
401 
404  EXPECT_EQ(state, kDifToggleEnabled);
405 
406  // Disabled.
407  //
408  // Make sure that the only relevant `enabled` bit is read - set all bits
409  // high apart from the `enabled` bit.
410  uint32_t register_value = bitfield_bit32_write(
411  std::numeric_limits<uint32_t>::max(), RSTMGR_CPU_INFO_CTRL_EN_BIT, false);
412  EXPECT_READ32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET, register_value);
413 
414  state = kDifToggleEnabled;
416  EXPECT_EQ(state, kDifToggleDisabled);
417 }
418 
419 class CpuInfoGetSizeTest : public RstmgrTest {};
420 
421 TEST_F(CpuInfoGetSizeTest, Success) {
422  EXPECT_READ32(RSTMGR_CPU_INFO_ATTR_REG_OFFSET, 5);
423 
424  size_t size = 0;
426  EXPECT_EQ(size, 5);
427 }
428 
429 TEST_F(CpuInfoGetSizeTest, BadArgs) {
432  size_t size;
434 }
435 
437  protected:
439  for (uint32_t i = 0; i < DIF_RSTMGR_CPU_INFO_MAX_SIZE; ++i) {
440  src_[i] = dev().GarbageMemory<uint32_t>();
441  }
442  }
443 
445 };
446 
447 TEST_F(CpuInfoDumpReadTest, NullArgs) {
449  nullptr, nullptr, DIF_RSTMGR_CPU_INFO_MAX_SIZE, nullptr));
450 
451  size_t segments_read;
453  nullptr, nullptr, DIF_RSTMGR_CPU_INFO_MAX_SIZE, &segments_read));
454 
457  nullptr, &dump[0], DIF_RSTMGR_CPU_INFO_MAX_SIZE, nullptr));
458 
460  nullptr, &dump[0], DIF_RSTMGR_CPU_INFO_MAX_SIZE, &segments_read));
461 
463  &rstmgr_, nullptr, DIF_RSTMGR_CPU_INFO_MAX_SIZE, &segments_read));
464 
466  &rstmgr_, &dump[0], DIF_RSTMGR_CPU_INFO_MAX_SIZE, nullptr));
467 }
468 
469 TEST_F(CpuInfoDumpReadTest, BadDumpSize) {
470  EXPECT_READ32(RSTMGR_CPU_INFO_ATTR_REG_OFFSET, DIF_RSTMGR_CPU_INFO_MAX_SIZE);
471 
472  size_t segments_read = 0xA5A5A5A5;
474  EXPECT_EQ(
476  &rstmgr_, &dump[0], DIF_RSTMGR_CPU_INFO_MAX_SIZE - 1, &segments_read),
477  kDifError);
478  EXPECT_EQ(segments_read, 0xA5A5A5A5);
479 }
480 
481 TEST_F(CpuInfoDumpReadTest, SuccessFullBuffer) {
482  EXPECT_READ32(RSTMGR_CPU_INFO_ATTR_REG_OFFSET, DIF_RSTMGR_CPU_INFO_MAX_SIZE);
483  EXPECT_READ32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET, 1);
484 
485  for (uint32_t i = 0; i < DIF_RSTMGR_CPU_INFO_MAX_SIZE; ++i) {
486  EXPECT_WRITE32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET,
487  {
488  {
489  RSTMGR_CPU_INFO_CTRL_EN_BIT,
490  true,
491  },
492  {
493  RSTMGR_CPU_INFO_CTRL_INDEX_OFFSET,
494  i,
495  },
496  });
497 
498  EXPECT_READ32(RSTMGR_CPU_INFO_REG_OFFSET, src_[i]);
499  }
500 
501  size_t segments_read = 0;
504  &rstmgr_, &dump[0], DIF_RSTMGR_CPU_INFO_MAX_SIZE, &segments_read));
505  EXPECT_EQ(segments_read, DIF_RSTMGR_CPU_INFO_MAX_SIZE);
506  EXPECT_THAT(src_, ElementsAreArray(dump));
507 }
508 
509 TEST_F(CpuInfoDumpReadTest, SuccessDumpSmaller) {
510  constexpr uint32_t dump_size = DIF_RSTMGR_CPU_INFO_MAX_SIZE - 1;
511 
512  EXPECT_READ32(RSTMGR_CPU_INFO_ATTR_REG_OFFSET, dump_size);
513  EXPECT_READ32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET, 1);
514 
515  for (uint32_t i = 0; i < dump_size; ++i) {
516  EXPECT_WRITE32(RSTMGR_CPU_INFO_CTRL_REG_OFFSET,
517  {
518  {
519  RSTMGR_CPU_INFO_CTRL_EN_BIT,
520  true,
521  },
522  {
523  RSTMGR_CPU_INFO_CTRL_INDEX_OFFSET,
524  i,
525  },
526  });
527 
528  EXPECT_READ32(RSTMGR_CPU_INFO_REG_OFFSET, src_[i]);
529  }
530 
531  size_t segments_read = 0;
532  dif_rstmgr_cpu_info_dump_segment_t dump[dump_size];
534  &rstmgr_, &dump[0], DIF_RSTMGR_CPU_INFO_MAX_SIZE, &segments_read));
535  EXPECT_EQ(segments_read, dump_size);
536  EXPECT_THAT(dump, IsSubsetOf(src_));
537 }
538 
539 class SoftwareResetTest : public RstmgrTest {};
540 
541 TEST_F(SoftwareResetTest, NullArgs) {
544 }
545 
546 TEST_F(SoftwareResetTest, BadPeripheral) {
548  &rstmgr_, RSTMGR_PARAM_NUM_SW_RESETS, kDifRstmgrSoftwareReset));
549 }
550 
551 TEST_F(SoftwareResetTest, SoftwareResetIsLocked) {
552  for (uint32_t reg_index = 0; reg_index < RSTMGR_PARAM_NUM_SW_RESETS;
553  ++reg_index) {
554  // When set to `0`, it means that the software reset for the
555  // peripheral is locked.
556  EXPECT_READ32(RSTMGR_SW_RST_REGWEN_0_REG_OFFSET + reg_index * 4, 0);
557 
558  EXPECT_EQ(dif_rstmgr_software_reset(&rstmgr_, reg_index,
560  kDifLocked);
561  }
562 }
563 
564 TEST_F(SoftwareResetTest, SuccessHold) {
565  for (uint32_t reg_index = 0; reg_index < RSTMGR_PARAM_NUM_SW_RESETS;
566  ++reg_index) {
567  // Software reset is not locked for any of the supported peripherals.
568  EXPECT_READ32(RSTMGR_SW_RST_REGWEN_0_REG_OFFSET + reg_index * 4, 1);
569 
570  // When reg is set to `0`, it means that the peripheral is held in reset.
571  EXPECT_WRITE32(RSTMGR_SW_RST_CTRL_N_0_REG_OFFSET + reg_index * 4, 0);
572 
573  EXPECT_DIF_OK(dif_rstmgr_software_reset(&rstmgr_, reg_index,
575  }
576 }
577 
578 TEST_F(SoftwareResetTest, SuccessRelease) {
579  for (uint32_t reg_index = 0; reg_index < RSTMGR_PARAM_NUM_SW_RESETS;
580  ++reg_index) {
581  // Software reset is not locked for any of the supported peripherals.
582  EXPECT_READ32(RSTMGR_SW_RST_REGWEN_0_REG_OFFSET + reg_index * 4, 1);
583 
584  // Check that reset can be de-asserted for every supported peripheral.
585  EXPECT_WRITE32(RSTMGR_SW_RST_CTRL_N_0_REG_OFFSET + reg_index * 4, 1);
586 
587  EXPECT_DIF_OK(dif_rstmgr_software_reset(&rstmgr_, reg_index,
589  }
590 }
591 
592 TEST_F(SoftwareResetTest, SuccessReset) {
593  for (uint32_t reg_index = 0; reg_index < RSTMGR_PARAM_NUM_SW_RESETS;
594  ++reg_index) {
595  // Software reset is not locked for any of the supported peripherals.
596  EXPECT_READ32(RSTMGR_SW_RST_REGWEN_0_REG_OFFSET + reg_index * 4, 1);
597 
598  // When bit is set to `0`, it means that the peripheral is held in reset.
599  EXPECT_WRITE32(RSTMGR_SW_RST_CTRL_N_0_REG_OFFSET + reg_index * 4, 0);
600 
601  // Check that reset can be de-asserted for every supported peripheral.
602  EXPECT_WRITE32(RSTMGR_SW_RST_CTRL_N_0_REG_OFFSET + reg_index * 4, 1);
603 
604  EXPECT_DIF_OK(dif_rstmgr_software_reset(&rstmgr_, reg_index,
606  }
607 }
608 
610 
611 TEST_F(SoftwareResetIsHeldTest, NullArgs) {
613 
614  bool asserted;
616 
618 }
619 
620 TEST_F(SoftwareResetIsHeldTest, BadPeripheral) {
621  bool asserted;
623  &rstmgr_, RSTMGR_PARAM_NUM_SW_RESETS, &asserted));
624 }
625 
626 TEST_F(SoftwareResetIsHeldTest, Success) {
627  for (uint32_t reg_index = 0; reg_index < RSTMGR_PARAM_NUM_SW_RESETS;
628  ++reg_index) {
629  // Check in turn that every peripheral is held in software reset.
630  EXPECT_READ32(RSTMGR_SW_RST_CTRL_N_0_REG_OFFSET + reg_index * 4, 0);
631 
632  bool asserted = false;
634  dif_rstmgr_software_reset_is_held(&rstmgr_, reg_index, &asserted));
635  EXPECT_TRUE(asserted);
636 
637  // Check in turn that every peripheral is not held in software reset.
638  EXPECT_READ32(RSTMGR_SW_RST_CTRL_N_0_REG_OFFSET + reg_index * 4, 1);
639 
640  asserted = true;
642  dif_rstmgr_software_reset_is_held(&rstmgr_, reg_index, &asserted));
643  EXPECT_FALSE(asserted);
644  }
645 }
646 class FatalErrorTest : public RstmgrTest {};
647 
648 TEST_F(FatalErrorTest, GetBadArgs) {
653 }
654 
655 TEST_F(FatalErrorTest, GetCodes) {
657  EXPECT_READ32(RSTMGR_ERR_CODE_REG_OFFSET, 6);
659  EXPECT_EQ(codes, 6);
660 }
661 
662 } // namespace
663 } // namespace dif_rstmgr_unittest