4#include "sw/device/lib/testing/entropy_testutils.h"
9#include "sw/device/lib/testing/test_framework/check.h"
18#define MODULE_ID MAKE_MODULE_ID('e', 'n', 'y')
20status_t entropy_testutils_entropy_src_init(
void) {
23 CHECK_DIF_OK(dif_entropy_src_init_from_dt(
kDtEntropySrc, &entropy_src));
28 .route_to_firmware =
false,
29 .bypass_conditioner =
false,
31 .health_test_window_size = 0x0200,
40status_t entropy_testutils_auto_mode_init(
void) {
44 CHECK_DIF_OK(dif_csrng_init_from_dt(
kDtCsrng, &csrng));
45 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn0, &edn0));
46 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn1, &edn1));
48 TRY(entropy_testutils_stop_all());
51 TRY(entropy_testutils_entropy_src_init());
52 TRY(dif_csrng_configure(&csrng));
55 TRY(dif_edn_set_auto_mode(
63 .cmd = csrng_cmd_header_build(kCsrngAppCmdInstantiate,
74 .cmd = csrng_cmd_header_build(
85 .cmd = csrng_cmd_header_build(kCsrngAppCmdGenerate,
95 .reseed_interval = 32,
99 TRY(dif_edn_set_auto_mode(
106 .cmd = csrng_cmd_header_build(kCsrngAppCmdInstantiate,
117 .cmd = csrng_cmd_header_build(
128 .cmd = csrng_cmd_header_build(kCsrngAppCmdGenerate,
138 .reseed_interval = 4,
143status_t entropy_testutils_boot_mode_init(
void) {
147 CHECK_DIF_OK(dif_csrng_init_from_dt(
kDtCsrng, &csrng));
148 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn0, &edn0));
149 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn1, &edn1));
151 TRY(entropy_testutils_stop_all());
153 TRY(entropy_testutils_entropy_src_init());
154 TRY(dif_csrng_configure(&csrng));
155 TRY(dif_edn_set_boot_mode(&edn0));
156 TRY(dif_edn_set_boot_mode(&edn1));
157 TRY(dif_edn_configure(&edn0));
158 TRY(dif_edn_configure(&edn1));
162status_t entropy_testutils_stop_csrng_edn(
void) {
166 CHECK_DIF_OK(dif_csrng_init_from_dt(
kDtCsrng, &csrng));
167 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn0, &edn0));
168 CHECK_DIF_OK(dif_edn_init_from_dt(
kDtEdn1, &edn1));
170 TRY(dif_edn_stop(&edn0));
171 TRY(dif_edn_stop(&edn1));
172 TRY(dif_csrng_stop(&csrng));
176status_t entropy_testutils_stop_all(
void) {
177 CHECK_STATUS_OK(entropy_testutils_stop_csrng_edn());
179#ifdef HAS_ENTROPY_SRC
181 CHECK_DIF_OK(dif_entropy_src_init_from_dt(
kDtEntropySrc, &entropy_src));
182 TRY(dif_entropy_src_stop(&entropy_src));
188status_t entropy_testutils_error_check(
const dif_csrng_t *csrng,
192 bool found_error =
false;
194#ifdef HAS_ENTROPY_SRC
196 CHECK_DIF_OK(dif_entropy_src_init_from_dt(
kDtEntropySrc, &entropy_src));
197 TRY(dif_entropy_src_get_errors(&entropy_src, &err_code));
200 LOG_ERROR(
"entropy_src status. err: 0x%x", err_code);
205 TRY(dif_csrng_get_cmd_interface_status(csrng, &
status));
212 uint32_t fifo_errors;
213 TRY(dif_edn_get_errors(edn0, &fifo_errors, &err_code));
214 if (err_code || fifo_errors) {
216 LOG_ERROR(
"end0 error status. err: 0x%x, fifo_err: 0x%x", err_code,
220 TRY(dif_edn_get_errors(edn1, &fifo_errors, &err_code));
221 if (err_code || fifo_errors) {
223 LOG_ERROR(
"end1 error status. err: 0x%x, fifo_err: 0x%x", err_code,
226 TRY_CHECK(!found_error,
"entropy_testutils_error_check fail");