4#include "sw/device/lib/testing/entropy_src_testutils.h"
6#include "sw/device/lib/base/crc32.h"
9#include "sw/device/lib/testing/test_framework/check.h"
11#include "hw/top/entropy_src_regs.h"
13#define MODULE_ID MAKE_MODULE_ID('e', 'n', 's')
15status_t entropy_src_testutils_fw_override_enable(
17 bool route_to_firmware,
bool bypass_conditioner) {
19 .entropy_insert_enable =
true,
20 .buffer_threshold = buffer_threshold,
22 TRY(dif_entropy_src_fw_override_configure(entropy_src, fw_override_config,
29 .route_to_firmware = route_to_firmware,
30 .bypass_conditioner = bypass_conditioner,
32 .health_test_threshold_scope =
false,
33 .health_test_window_size = 0x0200,
40status_t entropy_src_testutils_wait_for_state(
45 TRY(dif_entropy_src_get_main_fsm_state(entropy_src, &cur_state));
46 }
while (cur_state != state);
50status_t entropy_src_testutils_drain_observe_fifo(
55 const size_t kDrainCount = 32;
61 TRY(dif_entropy_src_observe_fifo_nonblocking_read(entropy_src, NULL, &len));
62 }
while (len == kDrainCount);
67status_t entropy_src_testutils_disable_health_tests(
76 for (
size_t i = 0; i <
ARRAYSIZE(kHealthTest); i++) {
77 TRY(dif_entropy_src_health_test_configure(
80 .high_threshold = 0xffff,
81 .low_threshold = 0}));
93 mmio_region_read32(entropy_src->
base_addr,
94 ENTROPY_SRC_REPCNT_THRESHOLD_REG_OFFSET));
96 mmio_region_read32(entropy_src->
base_addr,
97 ENTROPY_SRC_REPCNTS_THRESHOLD_REG_OFFSET));
99 mmio_region_read32(entropy_src->
base_addr,
100 ENTROPY_SRC_ADAPTP_HI_THRESHOLD_REG_OFFSET));
102 mmio_region_read32(entropy_src->
base_addr,
103 ENTROPY_SRC_ADAPTP_LO_THRESHOLD_REG_OFFSET));
105 mmio_region_read32(entropy_src->
base_addr,
106 ENTROPY_SRC_ADAPTPS_THRESHOLD_REG_OFFSET));
108 mmio_region_read32(entropy_src->
base_addr,
109 ENTROPY_SRC_BUCKET_THRESHOLD_REG_OFFSET));
111 mmio_region_read32(entropy_src->
base_addr,
112 ENTROPY_SRC_MARKOV_HI_THRESHOLD_REG_OFFSET));
114 mmio_region_read32(entropy_src->
base_addr,
115 ENTROPY_SRC_MARKOV_LO_THRESHOLD_REG_OFFSET));
117 mmio_region_read32(entropy_src->
base_addr,
118 ENTROPY_SRC_EXTHT_HI_THRESHOLD_REG_OFFSET));
120 mmio_region_read32(entropy_src->
base_addr,
121 ENTROPY_SRC_EXTHT_LO_THRESHOLD_REG_OFFSET));
124 crc32_add32(&ctx, mmio_region_read32(entropy_src->
base_addr,
125 ENTROPY_SRC_ALERT_THRESHOLD_REG_OFFSET));
127 return crc32_finish(&ctx);