4#include "sw/device/lib/testing/entropy_testutils.h"
7#include "sw/device/lib/dif/dif_csrng_shared.h"
9#include "sw/device/lib/testing/test_framework/check.h"
15#define MODULE_ID MAKE_MODULE_ID('e', 'n', 'y')
17status_t entropy_testutils_entropy_src_init(
void) {
20 CHECK_DIF_OK(dif_entropy_src_init_from_dt(
kDtEntropySrc, &entropy_src));
25 .route_to_firmware =
false,
26 .bypass_conditioner =
false,
28 .health_test_window_size = 0x0200,
37status_t entropy_testutils_auto_mode_init(
void) {
41 CHECK_DIF_OK(dif_csrng_init_from_dt(
kDtCsrng, &csrng));
42 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn0, &edn0));
43 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn1, &edn1));
45 TRY(entropy_testutils_stop_all());
48 TRY(entropy_testutils_entropy_src_init());
49 TRY(dif_csrng_configure(&csrng));
52 TRY(dif_edn_set_auto_mode(
60 .cmd = csrng_cmd_header_build(kCsrngAppCmdInstantiate,
71 .cmd = csrng_cmd_header_build(
82 .cmd = csrng_cmd_header_build(kCsrngAppCmdGenerate,
92 .reseed_interval = 32,
96 TRY(dif_edn_set_auto_mode(
103 .cmd = csrng_cmd_header_build(kCsrngAppCmdInstantiate,
114 .cmd = csrng_cmd_header_build(
125 .cmd = csrng_cmd_header_build(kCsrngAppCmdGenerate,
135 .reseed_interval = 4,
140status_t entropy_testutils_boot_mode_init(
void) {
144 CHECK_DIF_OK(dif_csrng_init_from_dt(
kDtCsrng, &csrng));
145 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn0, &edn0));
146 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn1, &edn1));
148 TRY(entropy_testutils_stop_all());
150 TRY(entropy_testutils_entropy_src_init());
151 TRY(dif_csrng_configure(&csrng));
152 TRY(dif_edn_set_boot_mode(&edn0));
153 TRY(dif_edn_set_boot_mode(&edn1));
154 TRY(dif_edn_configure(&edn0));
155 TRY(dif_edn_configure(&edn1));
159status_t entropy_testutils_stop_csrng_edn(
void) {
163 CHECK_DIF_OK(dif_csrng_init_from_dt(
kDtCsrng, &csrng));
164 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn0, &edn0));
165 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn1, &edn1));
167 TRY(dif_edn_stop(&edn0));
168 TRY(dif_edn_stop(&edn1));
169 TRY(dif_csrng_stop(&csrng));
173status_t entropy_testutils_stop_all(
void) {
174 CHECK_STATUS_OK(entropy_testutils_stop_csrng_edn());
176#ifdef HAS_ENTROPY_SRC
178 CHECK_DIF_OK(dif_entropy_src_init_from_dt(
kDtEntropySrc, &entropy_src));
179 TRY(dif_entropy_src_stop(&entropy_src));
185status_t entropy_testutils_error_check(
const dif_csrng_t *csrng,
189 bool found_error =
false;
191#ifdef HAS_ENTROPY_SRC
193 CHECK_DIF_OK(dif_entropy_src_init_from_dt(
kDtEntropySrc, &entropy_src));
194 TRY(dif_entropy_src_get_errors(&entropy_src, &err_code));
197 LOG_ERROR(
"entropy_src status. err: 0x%x", err_code);
202 TRY(dif_csrng_get_cmd_interface_status(csrng, &
status));
209 uint32_t fifo_errors;
210 TRY(dif_edn_get_errors(edn0, &fifo_errors, &err_code));
211 if (err_code || fifo_errors) {
213 LOG_ERROR(
"end0 error status. err: 0x%x, fifo_err: 0x%x", err_code,
217 TRY(dif_edn_get_errors(edn1, &fifo_errors, &err_code));
218 if (err_code || fifo_errors) {
220 LOG_ERROR(
"end1 error status. err: 0x%x, fifo_err: 0x%x", err_code,
223 TRY_CHECK(!found_error,
"entropy_testutils_error_check fail");