11 #include "sw/device/lib/testing/csrng_testutils.h"
12 #include "sw/device/lib/testing/otp_ctrl_testutils.h"
13 #include "sw/device/lib/testing/rstmgr_testutils.h"
14 #include "sw/device/lib/testing/test_framework/check.h"
18 #include "otp_ctrl_regs.h"
20 OTTF_DEFINE_TEST_CONFIG();
25 static const uint32_t kOtpIfetchHwRelativeOffset =
26 OTP_CTRL_PARAM_EN_SRAM_IFETCH_OFFSET - OTP_CTRL_PARAM_HW_CFG1_OFFSET;
33 static const uint32_t kOtpCsrngFwReadBitOffset =
34 (OTP_CTRL_PARAM_EN_CSRNG_SW_APP_READ_OFFSET -
35 OTP_CTRL_PARAM_EN_SRAM_IFETCH_OFFSET) *
41 static void test_fuse_enable(
const dif_csrng_t *csrng) {
43 csrng_testutils_fips_instantiate_kat(csrng,
false));
44 CHECK_STATUS_OK(csrng_testutils_fips_generate_kat(csrng));
50 static void test_fuse_disable(
const dif_csrng_t *csrng) {
53 csrng_testutils_fips_instantiate_kat(csrng,
true));
63 static void check_csrng_fuse_enabled(
bool expected) {
65 CHECK_DIF_OK(dif_otp_ctrl_init(
70 .integrity_period_mask = 0x3ffff,
71 .consistency_period_mask = 0x3ffffff,
74 CHECK_STATUS_OK(otp_ctrl_testutils_wait_for_dai(&otp));
79 kOtpIfetchHwRelativeOffset));
80 CHECK_STATUS_OK(otp_ctrl_testutils_wait_for_dai(&otp));
85 CHECK((enable == kMultiBitBool8True) == expected,
86 "`fw_enable` not expected (%x)", enable);
102 CHECK_DIF_OK(dif_csrng_init(
108 CHECK_DIF_OK(dif_rstmgr_init(
110 info = rstmgr_testutils_reason_get();
113 LOG_INFO(
"Powered up for the first time");
114 check_csrng_fuse_enabled(
true);
115 test_fuse_enable(&csrng);
118 rstmgr_testutils_reason_clear();
126 LOG_INFO(
"Powered up for the second time");
128 check_csrng_fuse_enabled(
false);
129 test_fuse_disable(&csrng);